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
测试如下: