Linux shell脚本3-if语句、case语句、for语句、while语句、until语句、break语句、continue语句,格式说明及程序验证
目录
1.if 控制语句
1.1 if 语句格式
1.2 程序验证
2.case语句
2.1case语句格式
2.2程序验证
2.2.1 终端先执行程序,在输入一个数
2.2.2 终端执行程序时同时输入一个预设变量
2.2.3 case带有按位或运算和通配符匹配
3.for语句
3.1for语句格式
3.2程序验证
3.2.1 for语句形式1-变量求和
3.2.2 for语句形式2-循环输出变量
3.2.3 for语句形式2-执行ls命令,循环判断该目录下的文件类型
(1)程序遍历输出该目录下的文件
(2)程序遍历判断该目录下的所有文件类型
4.while语句
4.1 while语句格式
4.2 程序验证
5.until语句
5.1 until语句格式
5.2 程序验证
6.break、continue
6.1 break
6.2 continue
1.if 控制语句
1.1 if 语句格式
格式一:
if [ 条件 1 ]; then
执行第一段程序
else
执行第二段程序
fi
格式二:
if [ 条件 1 ]; then
执行第一段程序
elif [ 条件 2 ];then
执行第二段程序
else
执行第三段程序
fi
注意:
1. [ 条件 ] #条件与 [ ]要有空格
2.
if [ 条件 1 ]; then 也可以分为两行写,不用加 ;
if [ 条件 1 ]
then
3.需添加结束符号 fi
1.2 程序验证
程序:
#!/bin/bash
echo "please input a number >>> "
read NUM #读取键盘输入的数字
#注意:赋值时,等号两边不能加空格
# []里面存放表达式时必须加空格
echo " 判断 NUM 是否大于 50 "
#一般形式,程序只判断大于50的情况
if [ $NUM -gt 50 ];then
echo "NUM > 50"
fi # 结束标志
echo " ------ "
#程序判断大于、小于等于50的情况
echo " 判断 NUM 是否大于 50 "
if [ $NUM -gt 50 ]
then
echo "NUM > 50"
else
echo "NUM <= 50"
fi
echo " 阶梯形式: "
#阶梯形式,只执行一个条件
if [ $NUM -gt 50 ]
then
echo "NUM > 50"
elif [ $NUM -lt 50 ]
then
echo "NUM < 50"
else
echo "NUM = 50"
fi
echo " 嵌套形式: "
#嵌套形式,
if [ $NUM -gt 50 ]
then
echo "NUM > 50"
if [ $NUM -gt 100 ] #若NUM大于50,在判断和100的关系
then
echo "NUM > 100"
else
echo "NUM <= 100"
fi
elif [ $NUM -eq 50 ]
then
echo "NUM = 50"
else
echo "NUM < 50"
if [ $NUM -gt 30 ] #若NUM小于50,在判断和30的关系
then
echo "NUM > 30"
else
echo "NUM <= 30"
fi
fi
运行结果:
2.case语句
2.1case语句格式
(1)shell case语句
case $变量名称 in
"第一个变量内容")
程序段一
;; #当前语句结束符,和C语言break一样
"第二个变量内容")
程序段二
;;
*) 其它程序段
exit 1 #退出程序
esac #case语句结束标志,和case匹配
(2)C语言case语句
switch(num)
{
case 1:执行语句1; break;
case 2:执行语句2; break;
case 3:执行语句3; break;
...
default:执行语句x; break; //以上case 语句未执行,执行该语句
}
2.2程序验证
2.2.1 终端先执行程序,在输入一个数
程序:
#!/bin/bash
echo "This script will print your choice"
read num #读取键盘输入的数字
case "$num" in
"1")
echo "your choice is one"
;; #当前语句结束符
"2")
echo "your choice is two"
;;
"3")
echo "Your choice is three"
;;
*) #以上case 语句未执行,执行该语句
echo "Error Please try again!"
exit 1 #退出,不会打印下面的 hello world
;;
esac #case语句结束标志,和case匹配
echo "hello world"
运行结果;
2.2.2 终端执行程序时同时输入一个预设变量
终端执行程序时同时输入一个预设变量,该预设变量在程序中直接使用。
程序:
#!/bin/bash
# 终端输入: ./xx.sh 2
# 上述输入的 ./xx.sh为预设变量 $0, 2为预设变量 $1
echo "This script will print your choice"
case "$1" in
"1")
echo "your choice is one"
;; #当前语句结束符
"2")
echo "your choice is two"
;;
"3")
echo "Your choice is three"
;;
*) #以上case 语句未执行,执行该语句
echo "Error Please try again!"
exit 1 #退出,不会打印下面的 hello world
;;
esac #case语句结束标志,和case匹配
echo "hello world"
运行结果:
2.2.3 case带有按位或运算和通配符匹配
程序:
#!/bin/bash
echo "Please input your choice:"
read choice
case "$choice" in
#输入 y Y yes Yes YES 5个中的一个,都会输出下面语句
y | Y | yes | Yes | YES)
echo "It's right"
;;
# *是一个通配符,可以匹配任意字符并且数量不限
# N* 只要是N开头的,都会执行下面的命令
N* | n*)
echo "It's wrong"
;;
*) #其他条件
echo "Error Please try again!"
exit 1
esac
运行结果:
3.for语句
3.1for语句格式
形式一:
for (( 初始值; 限制值; 执行步阶 ))
do
程序段
done
初始值:变量在循环中的起始值
限制值:当变量值在这个限制范围内时,就继续进行循环
执行步阶:每作一次循环时,变量的变化量
declare 是 bash 的一个内建命令,可以用来声明 shell 变量、设置变量的属性。declare 也可以写作 typeset。
declare -i s 代表强制把 s 变量当做 int 型参数运算。
形式二:
for var in con1 con2 con3 ...
do
程序段
done
第一次循环时,$var的内容为con1
第二次循环时,$var的内容为con2
第三次循环时,$var的内容为con3
...
当in后面所有的值都赋值完毕并执行命令后,循环结束
注意:
for语句变量不加 $ 符号
3.2程序验证
3.2.1 for语句形式1-变量求和
在shell中,变量默认是字符串类型,未初始化时为null(空)。但在算术运算中,未初始化的变量被视为0。如果使用declare -i声明变量为整数,但未赋值,变量在算术运算中视为0,但直接echo可能显示为空。因此,严格来说,整数类型的变量默认值并不是0,但在算术表达式中会被当作0处理。
程序:
#!/bin/bash
#声明sum变量是一个整数变量,准备保存整数
# declare 也可以写作 typeset
declare -i sum
typeset -i sum1
# for语句变量不加 $ 符号
for (( i=1; i<=100; i++ ))
do
sum=sum+i
done
echo "The sum result is $sum"
for (( i=1; i<=100; i++ ))
do
sum1=sum1+i
done
echo "The sum1 result is $sum1"
运行结果:

3.2.2 for语句形式2-循环输出变量
程序:
#!/bin/bash
#注意:for循环后的变量之前不能加$
#for var in con1 con2 con3 ...
#第一次循环时,$var的内容为con1
#第二次循环时,$var的内容为con2
#第三次循环时,$var的内容为con3
#...
#当in后面所有的值都赋值完毕并执行命令后,循环结束
for i in 1 2 3 4 5
do
echo $i
done
echo "结束"
运行结果:
3.2.3 for语句形式2-执行ls命令,循环判断该目录下的文件类型
(1)程序遍历输出该目录下的文件
程序:
#!/bin/bash
for name in `ls`
do
echo " $name"
echo " ---"
done
运行结果:
(2)程序遍历判断该目录下的所有文件类型
程序:
#!/bin/bash
for name in `ls`
do
if [ -f $name ];then # -f 普通文件
echo "$name is file"
elif [ -d $name ];then # -d 目录文件
echo "$name is directory"
else
echo "其他类型文件"
fi
done
echo "结束"
运行结果:
与终端执行ll命令判断结果一致。
4.while语句
4.1 while语句格式
while [ condition ]
do
程序段
done
当condition
条件成立
的时候
进入while循环
,直到condition不成立时才退出循环。
注意:
[ condition ] ,condition
两边要留空格。
4.2 程序验证
程序:
#!/bin/bash
#声明 num变量是一个整数变量,准备保存整数
# declare 也可以写作 typeset
declare -i num
typeset -i s #声明s变量是一个整数变量
echo "num= $num" #未赋值,算数运算默认为0
while [ "$num" != "101" ] #求1~100的累加和
do
# echo "num= $num"
s+=num;
num=num+1;
done
echo "The count is $s"
echo "结束"
运行结果:
5.until语句
5.1 until语句格式
until [ condition ]
do
程序段
done
这种方式
与while恰恰相反
,当condition
条件成立(为真)
的时候
退出循环
,
当condition
条件不成立(为假)
的时候
执行循环
。
5.2 程序验证
程序:
#!/bin/bash
#声明 num变量是一个整数变量,准备保存整数
# declare 也可以写作 typeset
declare -i num
typeset -i s #声明s变量是一个整数变量
echo "num= $num" #未赋值,算数运算默认为0
#until循环,是循环条件不成立,执行命令体,如果条件为真,则循环结束
#until [ "$num" = "101" ] #求1~100的累加和,num等于101时,退出循环
until [ "101" = "$num" ] #求1~100的累加和,num等于101时,退出循环
do
# echo "num= $num"
s+=num;
num=num+1;
done
echo "The count is $s"
echo "结束"
运行结果:

6.break、continue
(1)break命令
break命令允许跳出循环。
break 通常在进行一些处理后
退出循环
或case 语句
(2)continue命令
continue 命令类似于break 命令。
只有一点重要差别,它
不会整个跳出循环
,
只是跳过本次循环
步骤。
6.1 break
程序:
#!/bin/bash
for ((num=1; num<=10; num++))
do
if [ $num -eq 5 ] #判断num是否等于5,等于5时退出整个循环
then
#break退出整个循环
break
fi
echo "num = $num"
done
echo "结束"
运行结果:
6.2 continue
程序:
#!/bin/bash
for ((num=1; num<=10; num++))
do
if [ $num -eq 5 ] #判断num是否等于5,等于5时退出本次循环,继续执行下次循环
then
#continue退出本次循环,当执行到continue的位置时,
#循环下方的代码不在执行,但是接着下个循环继续执行
continue
fi
echo "num = $num"
done
echo "结束"
运行结果:
