目录

LinuX-Shell-流程控制

LinuX—Shell—流程控制

if判断

1) 基本语法

(1)单分支
if [ 条件判断式 ];then
程序
fi

或者

if [ 条件判断式 ]
then
程序
fi
(2)多分支
if [ 条件判断式 ]
then
程序
elif [ 条件判断式 ]
then
程序
else
程序
fi
注意事项:

① [ 条件判断式 ],中括号和条件判断式之间必须有空格

② if后要有空格

2) 案例实操

输入一个年龄数字,如果小于18,则输出“未成年”,如果小于60,则输出“成年人”,否则输出“老年人”,如果没有指定年龄,提示“请携带年龄”。

feng@ubuntu:~$ vim if.sh

写入以下内容

#!/bin/bash
if [ $# -eq 0 ]
then
echo '请携带年龄'
elif [ $1 -lt 18 ]
then
echo '未成年人'
elif [ $1 -lt 60 ]
then
echo '成年人'
else
echo '老年人'
fi

保存退出。

feng@ubuntu:~$ chmod 777 if.sh
feng@ubuntu:~$ ./if.sh 12
未成年人
feng@ubuntu:~$ ./if.sh 34
成年人
feng@ubuntu:~$ ./if.sh 66
老年人
feng@ubuntu:~$ ./if.sh
请携带年龄

case语句

1) 基本语法

case $变量名 in 
"值1")
    如果变量的值等于值1,则执行程序1 
;; 
值2) 
    如果变量的值等于值2,则执行程序2 
;; 
    …省略其他分支… 
*) 
    如果变量的值都不是以上的值,则执行此程序 
;; 
esac

注意事项:

(1)case行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。

(2)双分号“;;”表示命令序列结束,相当于C中的break。

(3)最后的“*)”表示默认模式,相当于C中的default。

2) 案例实操

输入一个字符串,如果是start,则输出starting..,如果是stop,则输出stopping..,如果是其它,输出 please input (start|stop)。

feng@ubuntu:~$ vim case.sh

脚本中写入以下内容。

#!/bin/bash 

case $1 in 
"start")
        echo "starting"
;;
"stop")
        echo "stopping"
;;
*)
        echo "please input (start|stop)"
;;
esac

保存退出。

feng@ubuntu:~$ chmod 777 case.sh
feng@ubuntu:~$ ./case.sh start
starting
feng@ubuntu:~$ ./case.sh stopping
stopping
feng@ubuntu:~$ ./case.sh x
please input (start|stop)

for循环 (sh不支持,bash支持)

1) 基本语法1

for ((初始值;循环控制条件;变量变化)) 
do 
    程序 
done

2) 案例实操

从1加到100

feng@ubuntu:~$ vim for1.sh

脚本中写入以下内容。

#!/bin/bash

sum=0
for((i=1;i<=100;i++))
do
        sum=$[$sum+$i]
done
echo $sum

保存退出。

feng@ubuntu:~$ chmod 777 for1.sh
feng@ubuntu:~$ ./for1.sh
5050

3) 基本语法2

for 变量 in 值1 值2 值3… 
do 
    程序 
done

4) 案例实操

feng@ubuntu:~$ vim for2.sh

写入以下内容。

#!/bin/bash

for i in a b c
do
      echo "let's call $i"
done

保存退出。

feng@ubuntu:~$ chmod 777 for2.sh 
feng@ubuntu:~$ ./for2.sh
let's call a
let's call b
let's call c
(1)比较$*和$@区别

$*和$@都表示传递给函数或脚本的所有参数,不被双引号“”包含时,都以$1 $2 …$n的形式输出所有参数。

feng@ubuntu:~$ vim for3.sh

写入以下内容。

#!/bin/bash 
echo '=============$*============='
for i in "$*" 
#$*中的所有参数看成是一个整体,所以这个for循环只会循环一次 
do
        echo "let's call $i"
done
echo '=============$@============='
for j in "$@" 
#$@中的每个参数都看成是独立的,所以“$@”中有几个参数,就会循环几次 
do
        echo "let's call $i"
done

保存退出。

feng@ubuntu:~$ chmod 777 for3.sh
feng@ubuntu:~$ ./for4.sh cls mly wls
=====$*=========
let's call a b c
=====$@=========
let's call a
let's call b
let's call c

while循环

1) 基本语法

while [ 条件判断式 ] 
do 
    程序
done

2) 案例实操

从1加到100。

feng@ubuntu:~$ vim while.sh

写入以下内容。

#!/bin/bash
sum=0
i=1
while [ $i -le 100 ]
do
        sum=$[$sum+$i]
        i=$[$i+1]
done

echo $sum

保存退出。

feng@ubuntu:~$ chmod 777 while.sh 
feng@ubuntu:~$ ./while.sh 
5050