SHELL脚本中的常用语句_(1)(for, while, if, case)

1. for语句

1.1 for…do…done(固定循环)

for 这种语法,则是“已经知道要进行几次循环”的状态!

for的语法

for 的语法是:
for var in con1 con2 con3 ...
do
    程序段
done
以上面的例子来说,这个 $var 的变量内容在循环工作时:
1. 第一次循环时, $var 的内容为 con1;
2. 第二次循环时, $var 的内容为 con2;
3. 第三次循环时, $var 的内容为 con3;
4. ...

示例如下:
假设我有三种动物,分别是 dog, cat, elephant 三种,我想每一行都输出这样:“There are dogs”之类的字样,则可以编写脚本

#!/bin/bash
for animal in dog cat elephant
do
    echo "There are ${animal}s "
done

这里写图片描述
执行如下:
这里写图片描述

1.2 for…do…done的数值处理

除了上述的方法之外 for 循环还有另外一种写法!

for do done数值处理

语法如下:
for (( 初始值; 限制值; 执行步阶 ))
do
    程序段
done

这种语法适合于数值方式的运算当中,在 for 后面的括号内的三串内容意义为:
1.初始值:某个变量在循环当中的起始值,直接以类似 i=1 设置好;
2.限制值:当变量的值在这个限制值的范围内,就继续进行循环。例如 i<=100;
3.执行步阶:每作一次循环时,变量的变化量。例如    i=i+1。
注:在“执行步阶”的设置上,如果每次增加 1 ,则可以使用类似“i++”的方式,亦即
是 i 每次循环都会增加一的意思

示例如下:

编辑 count.sh脚本,内容如下:
编辑 count.sh 脚本,内容如下
 1 #!/bin/bash
 2 read -p "Please input a number,I will count for 1+2+...+your_input:" nu
    # 交互式输入提示,键入数字,将从 1 一直加到你所键入的数字
 3 sum=0                    # 定义和值 sum = 0
 4 for (( i=1; i<=${nu}; i=i+1 ))    
    # 定义循环,变量 i = 1,i <= 你键入的数字,i 进行自加 
 5 do
 6         sum=$((${sum}+${i})) 
    # 每次循环都执行对 sum 的值加上 i 的值
 7 done
 8 echo "The result of '1+2+3+...+${nu}' is == ${sum}"
    # 输出求和结果

这里写图片描述
执行如下:
这里写图片描述

2. While 语句

while do done(不定循环)

while [ condition ]      # 中括号内的状态就是判断式
do                       # 循环的开始!
    程序段落
done                     # 循环的结束
while 的中文是“当....时”所以,这种方式说的是“当 condition条件成立时,就进行循环,
直到 condition 的条件不成立才停止”的意思

示例如下:假设我要让使用者输入 yes 才结束程序的执行,否则就一直进行告知使用者输入字串

编辑 test.sh 脚本,内容如下:
 1 #!/bin/bash
 2 while [ "${yn}" != "yes" -a "${yn}" != "YES" ]
    # 循环条件:输入不等于 yes 或着 YES 循环继续
 3 do
 4         read -p "Please input yes/YES to stop this program: " yn
 5 done
 6 echo "OK! you input the correct answer."

这里写图片描述
执行如下:
这里写图片描述

3. if 语句

这个 if …. then 是最常见的条件判断式。简单的说,当符合某个条件判断的时候,就予以进行某项动作。if … then 的判断还有多层次的情况

3.1 单层、简单条件判断式

如果只有一个判断式要进行,与” ||,&& “类似

 if [ 条件判断式 ];
 then
     执行操作  #当条件判断式成立时,可以进行的指令工作内容;
 fi      #将 if 反过来写,就成为 fi,结束 if 的意思!

示例如下:
利用 if 语句编写简单的脚本,实现,当脚本后输出为 cat 时,输出 dog
编写如下:

#!/bin/bash
if [ $1 = "cat" ]
then
    echo "dog"
fi

这里写图片描述
测试如下:
这里写图片描述

3.2 多重、复杂条件判断式

在同一个数据的判断中,如果该数据需要进行多种不同的判断时,就需要用到 if else 或者 if elif else 语句了

 一个条件判断,分成功进行与失败进行  (else)
 if [ 条件判断式 ]
 then
     当条件判断式成立时,可以进行的指令工作内容;
 else
     当条件判断式不成立时,可以进行的指令工作内容;
 fi

 多个条件判断 (if ... elif ... elif ... else) 分多种不同情况执行
 if [ 条件判断式一 ];
 then
     当条件判断式一成立时,可以进行的指令工作内容;
 elif [ 条件判断式二 ]; 
 then
     当条件判断式二成立时,可以进行的指令工作内容;
 else
     当条件判断式一与二均不成立时,可以进行的指令工作内容;
 fi

注elif 也是个判断式,因此出现 elif 后面都要接 then 来处理。但是 else 已经是最后的没有成立的结果了;所以 else 后面并没有 then
示例如下:
接上述脚本进行继续编写,当输入为 dog 时,输出 cat;当输入为 cat 时输出 dog 其他输出 提示输入 dog 或者 cat 。
编写如下:

#!/bin/bash
if [ $1 = "cat" ];then
    echo "dog"
elif [ $1 = "dog" ];then
    echo "cat"
else
    echo "please input cat or dog after script!!"
fi

这里写图片描述
测试如下:
这里写图片描述

4. case … esac 语句

if …. then …. fi ”对于变量的判断是以“比对”的方式来分辨的,如果符合状态就进行某些行为,并且通过较多层次(就是elif…)的方式来进行多个变量的程序码撰写。多层次的判断对于固定字符串的判定来说显得过于缓慢,若是我们所要求的判定在语句的最后,那就得等候多时才能得到想要的判定,这样显然不合理
case…in….esac 语句只针对给定变量来设置状况,大大节省判定时间。

语法如下:

 case $变量名称 in   # 关键字为 case ,还有变量前有钱字号
     "第一个变量内容") # 每个变量内容建议用双引 号括起来,关键字则为小括号 )
     程序段
     ;;      # 每个类别结尾使用两个连续的分号来处理!
     "第二个变量内容")
     程序段
     ;;
     *)             # 最后一个变量内容都会用 * 来代表所有其他值
                    # 不包含第一个变量内容与第二个变量内容的其他程序执行段
     exit   1
     ;;
 esac  

示例如下:
编写脚本让使用者能够输入 A,B,C,并且将使用者的变量显示到屏幕上,如果不是 A,B,C时就告知使用者仅有这三种选择。只有选择正确才会退出。
编写如下:

#!/bin/bash
Choice()
{
    read -p "please input your choice : " choice
}
Choice

Case()
{
case $choice in
    A)
    echo "your choice is A"
    exit 0
    ;;
    B)
    echo "your choice is B"
    exit 0
    ;;
    C)
    echo "your choice is C"
    exit 0
    ;;
    *)
    echo "please input your choice [A],[B]or[C]."
    Choice
    Case
esac
}
Case

这里写图片描述
测试如下:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/MYS_Sunshine/article/details/80847256