linux shell 个人学习笔记

阅读量: searchstar 2020-02-05 18:10:23
Categories: Tags:

安全重启:
按住alt+<PrtSc>,然后依次按下reisub即可安全重启。

语法

bash支持所有POSIX shell的语法:POSIX shell学习笔记

下面的是不在POSIX标准里的特性。

条件判断

man bash,然后搜索CONDITIONAL EXPRESSIONS,可以看到完整的列表。

for

参考:https://blog.csdn.net/astraylinux/article/details/7016212

for ((i=0; i<10; ++i))  
do  
    echo $i  
done  

注意是双括号。
还有其他用法。看参考链接

正则表达式

if [[ 字符串 =~ 模式 ]]; then
	echo 字符串中含有模式
fi

比如最简单的:

if [[ 2333test233222 =~ test233 ]]; then
	echo yes;
fi

会打印出yes

如果要判断是否不包含:

if ! [[ 2333test233222 =~ test233 ]]; then
	echo yes;
fi

或操作:

if [[ 2333test233222 =~ abc || 2333test233222 =~ test233 ]]; then
	echo yes;
fi
# yes

与操作:

if [[ 2333test233222 =~ abc && 2333test233222 =~ test233 ]]; then
	echo yes;
fi

重定向

# 等价于 Command > shell.log 2>&1
Command &> shell.log

数组

来源:https://www.yiibai.com/bash/bash-array.html

定义

ARRAY_NAME=(element_1st element_2nd element_Nth)

访问某个下标的元素

下标从0开始。

echo ${ARRAY_NAME[2]}

访问所有元素

# 经实测,bash是每个元素一个不带引号的结果,zsh是每个元素一个带引号的结果
echo ${ARRAY_NAME[@]}
echo ${ARRAY_NAME[*]}
# 每个元素一个带引号的结果
echo "${ARRAY_NAME[@]}"
# 所有元素组成一个结果
echo "${ARRAY_NAME[*]}"

例如:

arg_num() {
	echo $#
}
a=(1 "2   3")
# bash 相当于 arg_num 1 2   3
# zsh 相当于 arg_num 1 "2   3"
arg_num ${a[@]}
arg_num ${a[*]}
# 相当于 arg_num 1 "2   3"
arg_num "${a[@]}"
# 相当于 arg_num "1 2   3"
arg_num "${a[*]}"

访问slice

# 从第m个开始一直到末尾
${ARRAY_NAME[@]:m}
# 从第m个开始取n个。下标从0开始。
${ARRAY_NAME[@]:m:n}

保存为新的数组:

SLICED_ARRAY=(${ARRAY_NAME[@]:m:n})

参考:https://stackoverflow.com/questions/1335815/how-to-slice-an-array-in-bash

长度

```shell
a=(1 2 3 4)
echo $