Linux Shell (5)-if、case、for、while、until

  1. if

四种结构:

if condition; then
   commands
fi
----------------------
if condition
then
   commands
fi
----------------------
if condition
then
   commands
else
   commands
fi
----------------------
if condition
then
   commands
elif
then
   commands
fi
----------------------

condition:

test condition _通过test命令的退出状态来判断条件是否成立,换种写法为 [  condition_** ]**

---------------number

-eq        等于

-le         小于等于

-lt          小于

-ge        大于等于

-gt         大于

-ne        不等于

---------------string

=            等于

!=           不等于

>            大于,标准ASCII排序,使用每个字母的ASCII数值来决定排序

-n str     长度是否大于0

-z  str     长度是否为0

---------------file

-d file               file是否存在且为一个目录

-e file               file是否存在

-f file                file是否存在且为一个文件

-x file                file是否存在且可执行

-O file               file是否为当前用户拥有

file1 _-nt _file2    _是否 file1file2_新

file1 _-ot _file2    _是否file1file2_旧

---------------复合条件 [ condition ] &&**||** [ condition ]

  1. case

与其他语言类似,语法结构如下:

case $user in
pattern1 | pattern2)
   ......;;
pattern3)
   ......;;
*)
   ......;;
esac

  1. for

语法结构:

for var in list
do
   commands
done

list可以为以空格分隔的列表也可以为命令的输入;

list默认允许三种分隔符:空格、制表符、换行符,但可以通过IFS环境变量自定义分隔符,如

IFS=$'\n',比较好的习惯如下:

IFS.OLD=$IFS
IFS=$'\n'
........
IFS=$IFS.OLD
#这样可以避免之前修改了IFS变量影响后续的操作

C式for语法结构:

for (( a=1; a<=8; a++ ))
do
   ......
done

  1. while

语法结构:

while condition
do
   ......
done

condition与if中的一致

  1. until

语法结构:

until condition
do
  ......
done

  1. 其他

breakcontinue

跳出外循环:默认最内层为1,break 2则跳出倒数第二层外循环。

循环输出:done > aaa.txt 直接输出到aaa.txt文件