选择结构
if-then式
if-then式的结构形式如下:
1 | if [条件表达式1]; then |
if-then式举例如下:
1 |
|
case-esac式
case-esac式的结构形式如下:
1 | case X$variable in |
case-esac式举例如下:
1 |
|
循环结构
while-do-done式
while-do-done式的结构形式如下:
1 | while [ 条件表达式 ] |
while-do-done式举例如下:
1 | while [ X"$yn" != X"yes" -a X"$yn" != X"YES" ] |
until-do-done式
until-do-done式的结构形式如下:
1 | until [条件表达式] |
until-do-done式举例如下:
1 | until [ X"$yn" == X"yes" -a X"$yn" == X"YES" ] |
for-do-done固定循环式
for-do-done固定循环式的结构形式如下:
1 | for variable in cond1 cond2 cond3 ... |
for-do-done固定循环式举例如下:
1 | for variable in $(seq 1 14) |
for-do-done数值处理式
for-do-done数值处理式的结构形式如下:
1 | for((初始值; 限制条件; 执行步长)) |
for-do-done数值处理式举例如下:
1 | #1 |
其中,#1和#2经过验证都是正确的。可为什么在#1中执行步长可以写成i=i+1
呢?严格来说是i=$(($i+1))
的啊。难道说,这里的i相当于是declare -i i
吗?待确认。
循环遍历实践举例
(1)遍历目录下面有哪些文件或目录
1 | for file in ./* #遍历当前目录下有哪些文件或目录 |
(2)遍历文件中内容
1 | for file in $(cat list) #逐行遍历文件list中的内容 |
(3)使用for快速批量处理命令
1 | for x in `cat hostlist`; do ssh $x "cd /home/wahaha/ $$ ls -1 | tail -1"; done #串行 |
(4)使用while快速批量处理命令
1 | ps aux | grep -v grep | awk '{print $2}' | while read line; do kill -9 $line; done |
备注:while read line这种形式,循环体内不能是ssh登录哦,否则只能登录一台,用上面的for循环就好了。
关于条件表达式闲杂知识
if中的条件判断式用的就是[ ]
判断符号,因为[ ]
用户和test命令几乎一样,所以如果不知道[ ]
中某个符号的含义,就是man test看看喽。
多个条件形成一个复合表达式的方式有两种:
(1)写在一个[ ]
内,例如[ exp1 -o exp2 ]
(2)通过逻辑操作符连接多个[ ]
,例如[ exp1 ] || [ exp2 ]
,[ exp1 ] && [ exp2 ]
[ "$variable" == "Y" -o "$variable" == "y"]
与[ "$variable" == "Y" ] || [ "$variable" == "y" ]
的含义是一样的。
[ exp1 ] || [ exp2 ]
,[ exp1 ] && [ exp2 ]
中的||
,&&
与cmd1 || cmd2
,cmd1 && cmd2
中的||
,&&
意涵是不一样的。在[ exp1 ] || [ exp2 ]
,[ exp1 ] && [ exp2 ]
中||
,&&
是逻辑操作符的含义。