shell脚本从入门到精通干货第二部分.

本文介绍了Shell脚本中的流程控制语句,包括条件判断、循环控制及分支语句等。详细讲解了if、if-else、if-else-if、for、while、case等语句的使用方法,并通过实例演示如何利用这些语句实现特定功能。
摘要由CSDN通过智能技术生成

shell脚本 流程控制语句

Shell提供了丰富的语句判断方式,包括数字,字符串和文件。

数字:
1.运算符	说明
-eq	检测两个数是否相等,相等返回 true。
-ne	检测两个数是否不相等,不相等返回 true。
-gt	检测左边的数是否大于右边的,如果是,则返回 true。
-lt	检测左边的数是否小于右边的,如果是,则返回 true。
-ge	检测左边的数是否大于等于右边的,如果是,则返回 true。
-le	检测左边的数是否小于等于右边的,如果是,则返回 true。


2.字符串:
判断符	说明
-n STRING	字符串长度不为零
-z STRING	字符串长度为0
= 	判断两个字符串是否一样
!= 	判断两个字符串是否不一样

3.文件
判断符	说明
 -f	存在且是普通文件
 -d	存在且是目录
 -h	存在且是符号链接 
 -e	文件存在 
–r	文件存在并且可读
–w	文件存在并且可写
–x	文件存在并且可执行
if 语句
if 语句语法格式:
if condition
then
    command1 
    command2
    ...
    commandN 
fi

案例:
1)判断当前系统是否有多个ssh进程,如果有则打印true
### 测试脚本
#!/bin/bash
if [ $(ps -ef |grep ssh |wc -l) -gt 1 ]
then
echo "true"
fi
###执行脚本
[root@localhost shell2]# sh if1.sh 
true
也可以用:grep -c 用来统计字符串出现的次数

2)判断/media/cdrom目录是否存在,若不存在就去创建这个目录
###测试代码
#!/bin/bash 
DIR="/media/cdrom" 
if [ ! -e $DIR ] 
then 
mkdir -p $DIR 
fi

###执行脚本  创建成功
if else

if else 语法格式:
if condition
then
    command1
    command2
    ...
    commandN
else
    command
fi


案例:
1) 根据年龄判断是否成年
###测试代码
#!/bin/bash
echo "请输入您的年龄:"
read age
if [ $age -ge 18 ]   ##前后空格
then
        echo "您成年啦!!!!"
else
        echo "您未成年!!!!!"
fi

### 执行代码
[root@localhost shell2]# sh if3.sh 
请输入您的年龄:
23
您成年啦!!!!


if else语句经常与test命令结合使用

1. test 命令允许你做各种测试并在测试成功或失败时返回它的退出状态码
(为0表示为真,为1表示为假)。使用这个状态码,可以让 Bash 
对测试的结果做出反应。
2. test 命令的语法为:
	test EXPRESSION
	或
	[ EXPRESSION ]


案例:
1) 判断两个数是否相等
### 测试代码
#!/bin/bash
num1=$[3*4]
num2=$[12*2]
if test $num1 -eq $num2
then
        echo "两个数相等"
else
        echo "两个数不相等"
fi

### 执行代码
[root@localhost shell2]# sh if4.sh 
两个数不相等
if else-if else

if else-if else 语法格式:
if condition1
then
    command1
elif condition2 
then 
    command2
else
    commandN
fi


案例:
1) 输入成绩,判断成绩“优”“良”“中”
###测试代码
#!/bin/bash
echo "请输入您的成绩:"
read scare    #类似Java中的Scanner 从键盘输入
if [ $scare -ge 85 ] && [ $scare -le 100 ]
then
	echo "优秀"
elif [ $scare -ge 70 ] && [ $scare -le 85 ]
then
	echo "良"
elif [ $scare -ge 60 ] && [ $scare -le 70 ]
then
	echo "中"
else
	echo "差"
fi

### 执行结果
[root@localhost shell2]# sh if5.sh 
请输入您的成绩:
85
优秀
[root@localhost shell2]# sh if5.sh 
请输入您的成绩:
50
差
[root@localhost shell2]# sh if5.sh 
请输入您的成绩:
99
优秀
for循环语句
与其他编程语言类似,Shell支持for循环。

格式1-字符型循环
for循环一般格式为:

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

当变量值在列表里,for循环即执行一次所有命令,使用变量名获
取列表中的当前取值。命令可为任何有效的shell命令和语句。in列表可以包含替换、字符串和文件名。

in列表是可选的,如果不用它,for循环使用命令行的位置参数。

案例:
1) 顺序输出遍历数字
### 测试代码
#!/bin/bash
for afu01 in 1 2 3 4 5
do
        echo "遍历顺序输出结果为:$afu01"
done

### 执行结果
[root@afu01 shell2]# sh for1.sh 
遍历顺序输出结果为:1
遍历顺序输出结果为:2
遍历顺序输出结果为:3
遍历顺序输出结果为:4
遍历顺序输出结果为:5

2) 打印/root目录下所有文件的名字 
### 测试代码
#!/bin/bash
for file in $(ls /root)
do
	echo "$file"
done

### 执行结果
[root@afu01 shell2]# sh for2.sh 
anaconda-ks.cfg
initial-setup-ks.cfg
公共
模板
视频
图片
文档
下载
音乐
桌面
格式2-数字性循环
该格式的语法如下:
for ((初始值;循环控制条件;变量变化)do
	程序
done

需要注意以下几点:
初始值:在循环开始时,需要给某个变量赋予初始值,如 i=1。
循环控制条件:用于指定变量循环的次数,如 i<=100,则只要 i 的
  			值小于等于 100,循环就会继续。
变量变化:每次循环之后,变量该如何变化,如 i=i+1,代表每次
		循环之后,变量的值都加 1。

语法二和其他语言中的 for 循环类似,也就是事先决定循环次数的固定循环。

案例:
1) 求 1 - 100 的和
### 测试代码
#!/bin/bash
sum=0 #定义一个计数器  计数求和
for ((i = 0; i <=100; i++)) #1 加 到 100
do
#循环赋值
sum=$(($sum+$i))
done
#输出
echo "1 - 100的和为: $sum"

### 执行结果
[root@afu01 shell2]# sh for3.sh 
1 - 100的和为: 5050
while循环
while循环用于不断执行一系列命令,也用于从输入文件中读取数据;命令通常为测试条件。其格式为:
while 条件
do
    程序
done

案例:
1) 以下是一个基本的while循环,测试条件是:如果int小于等于5,
那么条件返回真。int从0开始,每次循环处理时,int加1。
运行上述脚本,返回数字1到5,然后终止。
### 测试脚本
#!/bin/bash
num=1
while [ $num -le 5 ]
do
    echo $num
    let num++
done

### 执行脚本
运行脚本,输出:
1
2
3
4
5

使用中使用了 Bash let 命令,它用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量,具体可查阅:Bash let 命令。


2) 求 1 -100 的和
### 测试代码
#!/bin/bash
i=1
num=0
while [ $i -le 100  ]
do
 let num=num+i
 let i++    #程序  let 是一个运算符号  可以让我们省略 $

done
echo "和为:$num"

###执行代码
[root@afu01 shell2]# sh while2.sh 
和为:5050
case语句
Shell case语句为多选择语句。可以用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。case语句格式如下:
case 变量 in
模式1)
    command1
    command2
    ...
    commandN
    ;;
模式2)
    command1
    command2
    ...
    commandN
    ;;
esac

case工作方式如上所示。取值后面必须为单词in,每一模式必须以
右括号结束。取值可以为变量或常数。匹配发现取值符合某一模式
后,其间所有命令开始执行直至 ;;。

取值将检测匹配的每一个模式。一旦模式匹配,则执行完
匹配模式相应命令后不再继续其他模式。如果无一匹配模式,使用
星号 * 捕获该值,再执行后面的命令。

案例:
1) 输入1到4,与1,2,3,4,其他 每一种模式进行匹配:
###测试代码
#!/bin/bash
echo "请输入 1 到 4 之间的数字"
echo "你输入的数字为:"
read num
case $num in
        1) echo "你选择了1"
        ;;
        2) echo "你选择了2"
        ;;
        3) echo "你选择了3"
        ;;
        4) echo "你选择了4"
        ;;
        *) echo "你输入的值不在范围"
        ;;

esac

### 执行代码
[root@afu01 shell2]# sh case1.sh 
请输入 1 到 4 之间的数字
你输入的数字为:
4
你选择了4
[root@afu01 shell2]# sh case1.sh 
请输入 1 到 4 之间的数字
你输入的数字为:
88
你输入的值不在范围

输入不同的内容,会有不同的结果​ 

跳出循环
在循环过程中,有时候需要在未达到循环结束条件时强制跳出循环,Shell使用两个命令来实现该功能:break和continue。

break命令允许跳出所有循环(终止执行后面的所有循环)。

案例:
1) 脚本进入死循环直至用户输入数字大于5。要跳出这个循环,返回到shell提示符下,需要使用break命令。
###测试代码
#!/bin/bash
while :
do

        echo -n "请输入 1 - 5之间的数字:"
        read num
        case $num in
                1|2|3|4|5) echo "你输入的数字为: $num"
                ;;
                *) echo "你输入的数字不在范围...."
                break
                ;;
        esac
done

### 执行结果
[root@afu01 shell2]# sh break.sh 
请输入 1 - 5之间的数字:4
你输入的数字为: 4
请输入 1 - 5之间的数字:3
你输入的数字为: 3
请输入 1 - 5之间的数字:9
你输入的数字不在范围....


continue
continue命令与break命令类似,只有一点差别,它不会跳出所有循环,仅仅跳出当前循环。
### 测试代码
while :
do
 echo -n "请输入1 - 5 之间的数字"
 read num
 	case $num in
 		1|2|3|4|5) echo "你输入的数字为: $num"
 		;;
 		*) echo "你输入的数字不在范围内"
 			continue
 			echo "游戏结束"
    esac
done

运行代码发现,当输入大于5的数字时,该例中的循环不会结束,语句
 echo "**游戏结束"** 永远不会被执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值