Linux shell脚本分支循环函数笔记

测试和判断 test命令(也可以使用[]代替test)可用来判断文件 整数 和字符串 返回逻辑值

  文件测试 -e 文件存在 -d 文件类型是否为目录 -f文件类型为普通文件

  整数比较 -eq (equal)相等 -ge (greater equal)大于等于 -gt(greater than) 大于 -le(less equal)小于等于 -lt(less than)小于

    更高级的test支持 ><=等符号的使用 这时要用[[]]符号代表test的高级用法

  字符串测试 -n 字符串长度是否非0  -z 是否为0  =字符串判等 !=字符串不等 (详细用法见 man test)

  当测试结果为正确时 返回0 返回非0值表示不正确  使用[]时 里面的空格不能少

分支 ifcase两种

  if通用格式: 包括了 if-else   if-elif-else if嵌套

if [ $USER = root ]; then
    if [ $UID = 0 ]; then
        echo "root 0"
    elif [ $UID = 1 ]; then
        echo "root 1"
    else
        echo "root"
    fi
else
        echo "not root"
fi

  case通用格式 每一项结束使用;; 不需要break  使用*可匹配任意情况

case "$1" in
    "start"|"START")
        echo "Starting..."
    ;;
    "stop"|"STOP")
        echo "Stoping..."
    ;;
  *)
echo "Usages: $0 {start|stop|reload|reload}" ;; esac

 循环 for和while两种形式 循环也支持 break 和continue  

  for 形式的

for i in {1..9}
do
    mkdir $i
done

  shell还支持c语言风格的for 但是shell并不擅长数值计算  这里使用了双圆括号(())

for ((i=1; i<8; i++))
do
    echo $i
done

  while 就是满足条件一直执行

i=0
while [ $i -lt 8 ]
do 
    echo "$i"
    ((i++))
done

  until 正好和while相反 不满足条件时一直执行

i=0
until [ $i -gt 8 ]
do 
    if [ $i -eq 5 ]; then
        ((i++))
        continue
    elif [ $i -eq 7 ]; then
        break
    else
        echo "$i"
        ((i++))
    fi
done

函数 function fname(){} function可以省略  调用时直接使用fname不用加括号 若有参数 直接跟在后面就行了

  可在函数里面使用local申请局部变量 $# 代表参数数量 $*$@ 代表所有位置参数 shift参数左移  $1 $2 $3 ...代表第1 2 3 个参数

fork炸弹 f (){f|f}  f 就是递归调用一直创建进程消耗内存

 

posted @ 2019-10-26 12:41  狂澜688  阅读(253)  评论(0编辑  收藏  举报