一、Shell 的数组、转义及引用、运算符、特殊字符、test 比较、if 判断、if-else 判断、嵌套 if 的使用、case 分支、for 循环、while 循环及 until 循环、循环的嵌套、break 及 continue 语句和使用循环处理位置参数
- 数组,如下所示:
- 定义数组,如
IPTS=( 10.0.0.1 10.0.0.2 10.0.0.3)
- 显示数组的所有元素,如
echo ${IPTS[@]}
- 显示数组元素个数,如
echo ${#IPTS[@]}
- 显示数组的第一个元素,如
echo ${IPTS[0]}
- 特殊字符,一个字符不仅有字面意义,还有元意,
#
注释、;
分号、\
转义符号、‘’ 引号。 - 转义符号,单个字符前的转义符号,
\n \r \t
单个字母的转义、\$ \'' \\
单个非字母的转义。 - 引用,常用的引用符号,“ 双引号、’ 单引号、` 反引号。
- 赋值运算符,如下所示:
=
赋值运算符,用于算数赋值和字符串赋值- 使用
unset
取消为变量的赋值 =
除了作为赋值运算符还可以作为测试操作符
- 算数运算符,如下所示:
- 基本运算符,
+ - * / ** %
- 使用
expr
进行运算,expr 4 + 5
- 数字常量,使用方法,如下所示:
let
‘变量名 = 变量值’- 变量值使用
0
开头为八进制 - 变量值使用
0x
开头为十六进制
- 双圆括号,是
let
命令的简化,如 ((a=10))、((a++))、echo $((10+20))
。 - 特殊符号,引号、括号、运算和逻辑符号、转义符号和其它符号。
- 引号,分为 ’ 完全引用、" 不完全引用和 ` 执行命令。
- 括号,如下所示:
() (()) $()
圆括号,单独使用圆括号会产生一个子 shell(xyz=123)
,数组初始化 IPS=(ip1 ip2 ip3)
[] [[]]
方括号,单独使用方括号是测试或数组元素功能,两个方括号表示测试表达式<>
尖括号,重定向符号{}
花括号,输出范围 echo {0..9}
,文件复制 cp /etc/passwd{,.bak}
- 运算符号和逻辑符号,分为
+ - * / %
算数运算符、> < =
比较运算符、&& || !
逻辑运算符。 - 转义符号,
\
是转义某字符,如下所示:
\n
普通字符转义之后有不同的功能\'
特殊字符转义之后,当做普通字符来使用
- 其它符号,分为
#
注释符、;
命令分隔符、case
语句的分隔符要转义 ;;
、:
空指令、. 和source
命令相同、~
家目录、,
分隔目录、*
通配符、?
条件测试或通配符、$
取值符号、|
管道符、&
后台运行、_
空格。 - 测试与判断,退出与退出状态、测试命令
test
、使用 if-then
语句、使用 if-then-else
语句、嵌套 if
的使用。 - 退出与退出状态,退出程序命令,如下所示:
exit
exit 10
返回 10 给 Shell
,返回值非 0 位不正常退出$?
判断当前 Shell
前一个进程是否正常退出
- 测试命令
test
,如下所示:
test
命令用于检查文件或者比较值test
可以做以下测试,文件测试、整数比较测试、字符串测试test
测试语句可以简化为 []
符号[]
符号还有扩展写法 [[]]
支持 &&、||、<、>
- 使用
if-then
语句, if-then
语句的基本用法,如下所示:
if [ 测试条件成立 ] 或 命令返回值是否为 0
then 执行相应命令
fi 结束
- 使用
if-then-else
语句,if-then-else
语句可以在条件不成立时也运行相应的命令,如下所示:
if [ 测试条件成立 ]
then 执行相应命令
else 测试条件不成立,执行相应命令
fi 结束
- 使用
if-elif-else
语句, if-elif-else
语句可以在条件不成立时也运行相应的命令,如下所示:
if [ 测试条件成立 ]
then 执行相应命令
elif [ 测试条件成立 ]
then 执行相应命令
else 测试条件不成立,执行相应命令
fi 结束
- 嵌套
if
的使用,if
条件测试中可以再嵌套 if
条件测试,如下所示:
if [ 测试条件成立 ]
then 执行相应命令
if [ 测试条件成立 ]
then 执行相应命令
fi
fi 结束
- 分支,
case
语句和 select
语句可以构成分支,如下所示:
case '$变量' in
'情况1' )
命令... ;;
'情况2' )
命令... ;;
* )
命令... ;;
esac
- 使用
for
循环遍历命令的执行结果,如下所示:
- 使用
for
循环遍历变量和文本,如下所示:
- 列表中包含多个变量,变量用空格分隔
- 对文本处理,要使用文本查看命令取出文本内容
- 默认逐行处理,如果文本出现空格会当做多行处理
C
语言风格的 for
命令,如下所示:
for ((变量初始化;循环判断条件;变量变化))
do
循环执行的命令
done
while
循环,如下所示:
while test测试是否成立
do
命令
done
- 死循环,如下所示:
while test测试一直成立
do
命令
done
until
循环,until
循环与 while
循环相反,循环测试为假时,执行循环,为真时循环停止。- 循环的使用,如下所示:
- 循环和循环可以嵌套
- 循环中可以嵌套判断,反过来也可以嵌套
- 循环可以使用
break
和 continue
语句在循环中退出
- 使用循环处理命令行参数,如下所示:
- 命令行参数可以使用
$1 $2 ... ${10}...${n}
进行读取 $0
代表脚本名称$*
和 $@
代表所有位置参数$#
代表位置参数的数量