控制语句应用 - pingdongyi/blog-2 GitHub Wiki

程序退出状态可以用$?获取,也可以手动指定退出状态,如exit n。退出状态为0表示成功退出,1表示退出失败。

if then else条件语句

语法

if condition1
then
    command1
elif condition2
then
    command2
else
    command3
fi

示例

#! /bin/bash

##数字测试
if [ "10" -lt "12" ]
then
    echo "yes,10<12"
fi

##根据命令执行结果判断,错误信息自定义输出,不显示系统错误,故>/dev/null 2>&1
if cp aaa aaa.bak >/dev/null 2>&1
then
    echo "cp success"
else
    echo "cp fail"
fi

##测试文件权限
###这里变量赋值=号两边不能有空格
filename="test.php"
if [ -w $filename ]
then
    echo "the file can write"
fi

##测试传递到脚本中的参数
if [ $# -lt 3 ]
then
    echo "the params's num < 3"
    #exit 1
fi

##用-t来测试脚本是否为终端交互模式还是后台运行
if [ -t ]
then
    echo "we are interactive with a terminal"
else
    echo "run in backend"
fi

##用LOGNAME检测运行脚本的用户
if [ "$LOGNAME" != "root" ]
then
    echo "not root ,is $LOGNAME"
else
    echo "$LOGNAME"
fi

##直接用:表示空操作
if [ "`ls -a $1`" = "" ]
then
    echo "empty directory"
else :
fi

case语句

语法

case var in
    opt1)
        command1
        ......
        ;;
    opt2)
        command2
        ......
        ;;
    opt3)
        command3
        ......
        ;;
    ...
    ;;
esac

### 示例

```bash
OPT=$1
case $OPT in
    start|reload)
        echo "this is start proc"
        ;;
    stop)
        echo "this is stop proc"
        ;;
    help)
        echo "this is help proc"
        ;;
    *)
        echo "usage : `basename $0` [start|reload|stop|help]"
        ;;
esac

for循环语句

语法

for item in list
do
    for item2 in list2
    do
        command
        ...
    done
done

示例

##循环变量列表
for var in 1 2 3 4 5
do
    echo $var
done

##循环查看脚本参数$@或$* 
for param in "$@"
do
    echo "this param is $param"
done

##循环当前目录文件
for ff in `ls`
do
    echo $ff
done

until循环

直到条件满足停止执行

语法

until condition
do
    command
    ......
done

示例

##until
num="10"
until [ $num -lt 1 ]
do
    echo $num
    num=`expr $num - 1`
done

while循环

当满足条件时执行语句

语法

while condition
do
    command
    ...
done

示例

##while循环读输入
while read film
do
    echo "yes,input your lovely $film"
done

##忽略#号
while read line
do
    case $line in
        \#*)
            ;;
        *)
            echo $line
            ;;
    esac
done

可以使用breakcontinue退出或跳过循环

⚠️ **GitHub.com Fallback** ⚠️