流程控制

当流程控制里的程序逻辑为空时,应该不写改分支语句、

if

  1. if condition
  2. then
  3. command1
  4. command2
  5. ...
  6. commandN
  7. elif condition2
  8. command20
  9. else
  10. command99
  11. fi
  12. # 写成一行的格式,适用于命令终端
  13. if [ $(ps -ef | grep -c 'ssh') -gt 1 ]; then echo 'true'; fi

for

for var in item1 item2 item3 ... itemN
do
    command1
  command2
  ...
  commandN
done


# 将元素值提成单独的变量
arr=(item1 item2 item3 ... itemN)
for var in $arr[*]
do
    command1
  command2
  ...
  commandN
done


### in 列表是可选的,如果不写,将自动循环命令行的位置参数
for arg
do
    echo $arg
done


### 写成一行
for var in item1 item2; do comand1; command2 done;


## 迭代器模式
for((assignment;condition:next));do
    command_1;
    command_2;
    commond_..;
done;
#这里要注意一点:如果要在循环体中进行 for 中的 next 操作,记得变量要加 $,不然程序会变成死循环。

while

while condition
do
    command
done
# 自增示例
int=1
while(( $int<=5 ))
do
    echo $int
  let "int++"
done

until 循环执行一系列命令直至条件为 true 时停止。 until 循环与 while 循环在处理方式上刚好相反。 一般 while 循环优于 until 循环,但在某些时候—也只是极少数情况下,until 循环更加有用。

无限循环

while :
do

done


while true
do

done


for (( ; ; ))

类 switch

case 值 in
模式1)
    command1
    command2
    ...
    commandN
    ;; #------------- 表示break
模式2)
    command1
    command2
    ...
    commandN
    ;;
*)#------------- * 代表 default 分支
    command1
    command2
    ...
    commandN
    ;;
esac

跳出循环

break  ## 终止当前和所有外层循环

continue ## 仅跳出当前循环

函数

[ function ] funname [()]

{

    action;

    [return int;]

}

#1、可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
#2、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255
函数返回值在调用该函数后通过 $? 来获得。
注意:所有函数在使用前必须定义。这意味着必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用。调用函数仅使用其函数名即可。



functioni demo(){
    action
}

demo2(){
    action
  echo $1;
  echo ${11}
  return 1;
}


demo

demo2 arg1 arg2 arg3 ... arg11

打印输入出

echo

echo "who am i"

echo "\"who am i \""

read name
echo "$name is a test"

#输出2行
echo "ok"
echo "is me"

#输出2行
echo -e "OK \n is me"     # -e 开启转义支持,输出两行

#输出1行
echo -e "ok \c"
echo "is me"


echo `date`   #输出命令执行结果

命令

test

Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。

数值测试

参数 说明
-eq 等于则为真
-ne 不等于则为真
-gt 大于则为真
-ge 大于等于则为真
-lt 小于则为真
-le 小于等于则为真

字符串测试

参数 说明
= 等于则为真
!= 不相等则为真
-z 字符串 字符串的长度为零则为真
-n 字符串 字符串的长度不为零则为真

文件测试

参数 说明
-e 文件名 如果文件存在则为真
-r 文件名 如果文件存在且可读则为真
-w 文件名 如果文件存在且可写则为真
-x 文件名 如果文件存在且可执行则为真
-s 文件名 如果文件存在且至少有一个字符则为真
-d 文件名 如果文件存在且为目录则为真
-f 文件名 如果文件存在且为普通文件则为真
-c 文件名 如果文件存在且为字符型特殊文件则为真
-b 文件名 如果文件存在且为块特殊文件则为真