shell编程之条件语句和循环语句

目录

shell条件判断语句

                if分支结构

                case语句

echo语句

日期

                date命令

                日历cal

循环语句

                循环含义

                for循环

                 for循环从1加到100

 while和until

                while从1加到100的和

                until 

总结


shell条件判断语句

                if分支结构

单分支语法结构

单分支:

if 判断条件;

then   条件为真的分支代码

fi

 判断主机的的连通性,$?=0,则网络通顺,否则不通

#!/bin/bash


ping -c 3 192.168.37.1 &>/dev/null
if
        [ $? = 0 ]
then
        echo "And the real network smooth"
        return 1
fi
        echo "The network is not smooth with the real machine"

 运行结果,网络不通顺

[root@xiaobin /data]# bash test2.sh 
The network is not smooth with the real machine

 双分支语法结构 

双分支

if 判断条件; then
 条件为真的分支代码


else

 条件为假的分支代码

fi

 比如测试当前系统是否为管理身份

#!/bin/bash


if [ "$USER" = "root" ]

   then

     echo "This is the admin user"

else

     echo "This is not an administrator user"
fi
~     

运行结果,这是管理员用户

[root@xiaobin /data]# bash test1.sh 
This is the admin user

多分支结构

if 判断条件1; then

 条件1为真的分支代码

elif 判断条件2; then

 条件2为真的分支代码

elif 判断条件3; then
 条件3为真的分支代码

...

else

 以上条件都为假的分支代码

fi
 

例如,学生成绩高于90且小于等于100为优秀,70-89为良好,60-69为及格,其余不及格

#!/bin/bash

read -p "Please enter your score:" cj

if [ $cj -ge 90 ] && [ $cj -le 100 ]
   then
      echo "Your grades are:$cj"
      echo "You are very good"


elif [ $cj -ge 70 ] && [ $cj -le 89 ]
   then
      echo "Your grades are:$cj"
      echo "Result Fine"
elif [ $cj -ge 60 ] && [ $cj -le 69 ]
   then
      echo "Your grades are:$cj"
      echo "You passed the exam" 
else
      echo "Your grades are:$cj"
      echo "You failed your grade"
fi

运行结果

[root@xiaobin /data]# bash test3.sh 
Please enter your score:80
Your grades are:80
Result Fine

                case语句

格式

case 变量引用 in

PAT1)

 分支1
 ;;

PAT2)
 分支2
 ;;
...

*)
 默认分支
 ;;

esac

case支持glob风格的通配符
* 任意长度任意字符
? 任意单个字符
[] 指定范围内的任意单个字符
|   或者,如: a|b

想一个例子,比如输入任何yes/y/Y/ye...或者no/No/n..输出的都是yes/no

#!/bin/bash


read -p "input 'yes' or no:" i


case $i in
[Yy]|[Yy][Ee][Ss])
echo "yes"
;;
[Nn]|[Nn][Oo])
echo "no"
;;
*)
echo "What the hell is that"
esac

运行结果,不管输入什么,输出的都是yes或者no

[root@xiaobin /data]# bash yes.sh 
input 'yes' or no:Yes
yes
[root@xiaobin /data]# bash yes.sh 
input 'yes' or no:N
no
[root@xiaobin /data]# bash yes.sh 
input 'yes' or no:NO
no
[root@xiaobin /data]# bash yes.sh 
input 'yes' or no:yES 
yes

再比如,用case实现成绩的排序

满分为优秀,80-99良好;60-79及格;其余不及格,输入别的报警

#!/bin/bash

read -p "Please enter your score:" score

case $score in
[100])
echo "Your grades are:$score You are very good"
;;
[89][0-9])
echo "Your grades are:$score Result FineYou"
;;
[67][0-9])
echo "Your grades are:$score You passed the exam"
;;
[0-9]|[1-5][0-9])
echo "Your grades are:$score You failed your grade"
;;
*)
echo "input error"
esac

运行结果

[root@xiaobin /data]# bash test4.sh 
Please enter your score:87
Your grades are:87 Result FineYou

echo语句

常用选项

echo -n表示不换行输出
echo -e 表示输出转义符
-e "\n"输出换行
-e "\r"光标移至行首,并且不换行
-e "\t"插入Tab键
-e "\f"换行,但光标仍停留在原处
\ \表示插入"\"本身
-e "\b"表示退格 不显示钱一个字符
-e "\c"抑制更多的输出或不换行
\a发出警告音

选项的一些实例

"\t"

[root@xiaobin /data]# echo -e adc'\t'123
adc	123

”\b“后面多加一个\b就是再多退一格 

[root@xiaobin /data]# echo -e '456789\b123'
45678123

[root@xiaobin /data]# echo -e '456789\b\b123'
4567123

”\c’使用在数字中间会把后面内容删除

[root@xiaobin /data]# echo -e '456789\c123'
456789[root@xiaobin /data]# echo -e '456789\c'
456789[root@xiaobin /data]# 

“\f‘,光标不动

[root@xiaobin /data]# echo -e '456\f789'
456
   789

日期

                date命令

显示当前时间

[root@xiaobin /data]# date
2021年 10月 26日 星期二 17:57:15 CST

-d你描述的日期,显示指定字符串所描述的时间,而非当前时间
%F完整日期格式,等价于 %Y-%m-%d
%T

时间(24小时制)(hh:mm:ss)

 显示前三天的时间

[root@xiaobin /data]# date -d '-3 day'
2021年 10月 23日 星期六 18:04:39 CST

完整格式

[root@xiaobin /data]# date -d '-3 day' +%F
2021-10-23

前三天的时间(24小时制)

[root@xiaobin /data]# date -d '-3 day' +%F-%T
2021-10-23-18:04:27

                日历cal

直接输入cal,输出当前月份

[root@xiaobin /data]# cal
      十月 2021     
日 一 二 三 四 五 六
                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

后面跟年份,输出当年的日历

[root@xiaobin /data]# cal 2018

 查看1752年9月份的日历

循环语句

                循环含义

将某代码段重复运行多次,通常有进入循环的条件和退出循环的条件

重复运行次数

  • 循环次数事先已知

  • 循环次数事先未知

常见的循环的命令:for, while, until

                for循环

        执行机制:
依次将列表中的元素赋值给“变量名”; 每次赋值后即执行一次循环体; 直到列表中的元素耗尽,循环
结束
        如果省略 [in WORDS ... ] ,此时使用位置参数变量 in "$@"

语法

for 名称 [in 词语 ... ] 

do 命令 

done
    为列表中的每个成员执行命令。

 或者

for (( 表达式1; 表达式2; 表达式3 )) 

do 命令

 done
    算术 for 循环。

 例如显示1到10

[root@xiaobin /data]# for i in {1..10}
> do
> echo $i
> done
1
2
3
4
5
6
7
8
9
10
 

[root@xiaobin /data]# for ((i=1; i<=10;i++))
> do
> echo $i
> done
1
2
3
4
5
6
7
8
9
10
 

                 for循环从1加到100

运行结果

[root@xiaobin /data]# bash xiangjia.sh 
1到100的和为5050

                打印99乘法表

#!/bin/bash


for i in {1..9}
   do
     for j in $(seq $i)
        do

  echo -e "$j*$i=$[j*i] \t\c"
     done
  echo
done




#!/bin/bash


for ((i=1; i<=9; i++))

 do

  for ((j=1; j<=$i; j++))

    do
echo -e "$i*$j=$[$j*$i] \t\c"
done
echo
done

显示结果

 打印倒叙99乘法表

#!/bin/bash


for i in {9..1..-1}
do
for j in $(seq $i)
do

echo -e "$j*$i=$[j*i] \t\c"
done
echo

显示结果

 while和until

        相对于for,需要知道循环次数,我们只知道停止条件,不知道次数,就需要使用while,直到达到条件

while
当命令判断为假时停止

until
当命令判断为真时停止

 while 命令 

do 命令

done
    只要测试成功即执行命令。

                while从1加到100的和


#!/bin/bash

sum=0
i=1
while [ $i -le 100 ]
    do

   sum=$[i+sum]
   let i++
done
echo "1到100的和为:$sum"

运行结果

[root@localhost data]#bash which.sh 
1到100的和为:5050

                until 

  • 用法: 重复测试某个条件,只要条件不成立则反复执行

    格式:
    • until 条件测试操作
    • do
    •   命令序列
  •    done

例如

#!/bin/bash


sum=0
i=0
until [ $i -gt 100 ]
do
 sum=$[sum+i]
 let i++
done
echo "1加到100的和:$sum"

 运行结果

[root@localhost data]#bash a.sh 
1加到100的和:5050
  • break跳出单个循环后面加数字2则代表跳出两层循环

  • continue终止某次循环中的命令,但是不会完全终止命令

总结

        本次主要学习了条件和循环语句,shell其实和C的逻辑大差不差,只是语法略有不同,只要了解他们的原理其实都一个道理,关键是能混合在一起使用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小柏ぁ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值