shell编程04【流程控制语句】

举报
波波烤鸭 发表于 2022/03/30 02:40:19 2022/03/30
【摘要】 流程控制语句 一、if语句 1.语法 if condition1 then command1 elif condition2 then command2 else com...

流程控制语句

一、if语句

1.语法

if condition1
then
    command1
elif condition2 
then 
    command2
else
    commandN
fi

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

写成一行(适用于终端命令提示符):

if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi

  
 
  • 1

2.举例

#!/bin/bash
a=10
b=20
if [ $a -eq $b  ]
then
   echo "a 等于 b"
elif [ $a -lt $b ]
then
   echo "a 小于 b"
else
   echo " a 大于 b"
fi

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

输出

[root@hadoop-node01 ~]# . s8.sh 
a 小于 b

  
 
  • 1
  • 2

注意
[ condition ] (注意condition前后要有空格)

二、case语句

  Shell case语句为多选择语句。可以用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。

casein
模式1)
    command1
    command2
    ...
    commandN
    ;;
模式2)
    command1
    command2
    ...
    commandN
    ;;
esac

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

举例

#!/bin/bash
case $1 in
start)
    echo "开始执行了..."
    ;;
stop)
    echo "执行完成...."
    ;;
*)
     echo "其他操作"

esac

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

输出:

[root@hadoop-node01 ~]# vim s9.sh 
[root@hadoop-node01 ~]# . s9.sh 
其他操作
[root@hadoop-node01 ~]# . s9.sh start
开始执行了...
[root@hadoop-node01 ~]# . s9.sh stop
执行完成....


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

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

三、循环语句

1.for循环

for循环一般格式为

for var in item1 item2 ... itemN
do
    command1
    command2
    ...
    commandN
done

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

写成一行

for var in item1 item2 ... itemN; do command1; command2… done;

  
 
  • 1

举例

#!/bin/bash
for i in 1,2,3,4
do
   echo $i
done

echo "------1------"
for i in {1..5}
do
   echo $i
done

echo "------2----"
for a in {1..5} ; do echo $a; done;

echo "-----3------"

for((i=0;i<10;i++))
do
  echo $i
done
echo "-----4-----"

for((i=0;i<5;i++)); do echo $i ;done;

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

输出:

[root@hadoop-node01 ~]# . s10.sh 
1,2,3,4
------1------
1
2
3
4
5
------2----
1
2
3
4
5
-----3------
0
1
2
3
4
5
6
7
8
9
-----4-----
0
1
2
3
4

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

break和continue关键字

#!/bin/bash
for i in {1..10}
do
   if [ $i -eq 5 ]
   then
        break;
   fi
   echo $i
done
echo "-------------"
for i in {1..10}
do
     if [ $i -eq 5 ]
     then
        continue
     fi
     echo $i
done

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

输出

[root@hadoop-node01 ~]# . s11.sh 
1
2
3
4
-------------
1
2
3
4
6
7
8
9
10

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

2.where循环

  while循环用于不断执行一系列命令,也用于从输入文件中读取数据;命令通常为测试条件。

while condition
do
    command
done

  
 
  • 1
  • 2
  • 3
  • 4

举例

#!/bin/bash
i=1
while(( $i<=5))
do
   echo $i
   let i++
done

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

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

无限循环

while :
do
    command
done

  
 
  • 1
  • 2
  • 3
  • 4

三、read语句

语法

read -p(提示语句)-n(字符个数) -t(等待时间 单位秒) 

  
 
  • 1

案例

[root@hadoop-node01 ~]# read -p 请输入密码: -n 10 -t 10 password
请输入密码:123456
[root@hadoop-node01 ~]# echo $password
123456

  
 
  • 1
  • 2
  • 3
  • 4

文章来源: dpb-bobokaoya-sm.blog.csdn.net,作者:波波烤鸭,版权归原作者所有,如需转载,请联系作者。

原文链接:dpb-bobokaoya-sm.blog.csdn.net/article/details/88924399

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。