Linux下的shell编程之循环(for循环,while循环)和条件判断(if条件判断,case条件判断)

一.shell中的for循环

1.for循环的语法格式

        shell中的 for 循环中可以使用 break 和 continue 关键字来跳出循环, 和java 用法一致。

        常用的for循环结构有三种:

粗略的结构:

for    条件

do

          循环主体

done

<1>语法一:

for   变量    in   值1  值2   值3...

do

        循环主体

done

或者

for   变量    in   {起始值..终止值}                  #这里面的起始值和终止值必须是纯数字,不能是$a,即不能是变量的值

do

        循环主体/命令

done

示例1:

示例2:

<2>语法二:

for   变量    in     `命令`

do

        循环主体

done

示例3:

<3>语法三:

for   ((初始值;循环控制;变量变化))

do

        循环主体

done

示例4:

2.for的嵌套循环

3.for循环的练习题

<1>练习1:编写脚本测试172.25.254网段中的主机网是否是通的。

如果是通的,就显示172.25.254.主机号  is up;如果是不通的,就显示172.25.254.主机号  is  down。

脚本内容

脚本运行结果

<2>练习2:编写脚本实现倒计时10秒。

显示 Time   秒数

脚本内容

脚本运行结果

<3>练习3:编写脚本实现从输入的分钟数和秒数开始改进行时间的倒计时。

显示 Time   分钟:秒

方法一:将分钟数化为秒数

脚本内容

 #!/bin/bash
read   -p   "请输入分钟数和秒数:"   a   b
let   time=$a*60+$b
#for   i   in   {$time..1}                  #这行代码的写法是错误的。{起始值  终止值},这里的起始值和终止值都必须是纯数字,不能写成某个变量的值
for   ((i=$time;i>0;i--))
do
        echo   -n   "TIME   `expr   $i  /  60`:`expr   $i  %  60` "
        echo   -n   -e   "\r"
        sleep   1
done

脚本运行结果

方法二:利用for双循环实现

脚本内容

 

脚本运行结果

 

<4>编写脚本实现打印9*9乘法表。

显示1*1=1

        2*1=2   2*2=4

        .................................

写法一:

脚本内容

脚本运行结果

写法二:

脚本内容

脚本运行结果

二.shell中的while循环

1.while循环的语法格式

         for循环适用于事先知道循环的次数,对于实现不知道循环的次数,for循环将会束手无策。而while循环可以解决实现不知道循

环次数这类问题。对于事先知道循环次数的问题,for循环和while循环是相通的,for循环能解决的问题,while循环也可以解决。

        常用的while循环的结构有三种:

粗略的结构:

while   条件

do

          循环主体

done

<1>语法一:

初始值

while  [  条件判断语句  ]

do

           循环主体

           变量变化                   #这里变量变化的方式有两种,一种是((a++)),另外一种是a=`expr  $a  +  1`

done

示例1:

<2>语法二:

初始值

while  ((条件判断语句))

do

           循环主体

           变量变化                                   #这里变量变化的方式有两种,一种是((a++)),另外一种是a=`expr  $a  +  1`

done

示例2:

<3>语法三:死循环(不同于for循环的地方,能解决实现不知道循环次数的问题的原因所在)

while   true

do

           循环主体

done

示例3:

2.while循环的练习题

编写一个脚本,使用while循环语句新建用户xin{1..20},并且设置这些用户的密码都为"123456"

脚本内容

脚本执行结果

三.shell中的if条件判断(else语句是可以没有的)

1.if条件判断的语法格式

        常用的if条件判断有三种结构:

<1>单分支if语句

if    条件判断;then                    #其中条件判断可以是linux的命令,也可以是[ ]命令的条件判断语句

        语句体

fi

示例1:

<2>双分支if语句

if    条件判断;then                    #其中条件判断可以是linux的命令,也可以是[ ]命令的条件判断语句

        语句体1

else

        语句体2

fi

示例2:

<3>多分支if语句

if    条件判断;then                   #其中条件判断可以是linux的命令,也可以是[ ]命令的条件判断语句

        语句体1

elif   条件判断;then                 #其中条件判断可以是linux的命令,也可以是[ ]命令的条件判断语句

        语句体2

elif   条件判断;then                 #其中条件判断可以是linux的命令,也可以是[ ]命令的条件判断语句

         语句体3

...                         #表示可以有多个

else

         语句体...

fi

示例3:

四.shell中的case条件判断(*)语句是可以没有的)

1.case条件判断的语法格式

        case条件判断适用于需要进行多重分支的应用情况。case条件判断只针对于条件判断是某个(单个匹配模式)或某些(合并

匹配模式)具体的情况而不是一个无限的区间(比如0<a<2,这个无限的区间,为什么是无限区间呢,这是因为它的值是无穷多

个)。对于条件判断是某个(单个匹配模式)具体的情况,case条件判断能实现的效 果,if条件判断也可以实现同样的效果。

        case语句结构特点如下:

  1. case行尾必须为单词“in”,每一个模式必须以右括号“)”结束。
  2. 双分号";;"表示命令序列结束。
  3. 匹配模式中可是使用方括号表示一个连续的范围,如[0-9];使用竖杠符号“|”表示或。
  4. 最后的“*)”表示默认模式,当使用前面的各种模式均无法匹配该变量时,将执行“*)”后的命令序列。

        常用的case条件判断的结构有两种:

<1>语法一:单个匹配模式

case   $变量名    in

           模式1)

           命令序列1

           ;;

          模式2)

           命令序列1

           ;;

          .....                          #表示可以有多个

           *)

           默认执行的序列

           ;;

esac

示例1:

<2>语法二:合并匹配模式

case   $变量名    in

           模式1|模式2|模式3|......)              #......表示可以有多个

           命令序列1

           ;;

          模式4|模式5|.......)                        #......表示可以有多个

           命令序列1

           ;;

          .....                          #表示可以有多个

           *)

           默认执行的序列

           ;;

esac

示例2:

2.case条件判断的练习题

编写脚本,实现交互式执行对应的程序功能

https://www.jb51.net/article/43968.htm

第一种写法:(使用echo打印)

脚本内容

脚本执行结果

第二种写法:(使用awk命令中的print打印)

脚本内容

脚本运行结果

所有写法汇总:


脚本运行结果:

  • 19
    点赞
  • 90
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的Linux Shell编程实现登录和注册功能的示例代码: ``` #!/bin/bash # 用户信息文件 USER_FILE="users.txt" # 登录函数 function login { echo "请输入用户名:" read username echo "请输入密码:" read -s password # 检查用户名和密码 if grep "^$username:$password$" $USER_FILE > /dev/null; then echo "登录成功!" else echo "用户名或密码错误!" fi } # 注册函数 function register { echo "请输入用户名:" read username # 检查用户名是否已存在 if grep "^$username:" $USER_FILE > /dev/null; then echo "用户名已存在!" return 1 fi echo "请输入密码:" read -s password echo "请再次输入密码:" read -s password2 # 检查两次输入的密码是否一致 if [ "$password" != "$password2" ]; then echo "两次输入的密码不一致!" return 1 fi # 将新用户信息保存到文件 echo "$username:$password" >> $USER_FILE echo "注册成功!" } # 主程序 echo "欢迎使用登录/注册系统!" while true; do echo "请选择操作:" echo "1. 登录" echo "2. 注册" echo "3. 退出" read choice case $choice in 1) login;; 2) register;; 3) exit 0;; *) echo "无效选项!";; esac done ``` 在以上代码中,用户信息存储在名为"users.txt"的文件中,每行一个用户,格式为"username:password"。登录函数通过读取用户输入的用户名和密码,从文件中查找匹配的用户信息来实现登录功能。注册函数则先检查用户输入的用户名是否已存在,再检查两次输入的密码是否一致,最后将新用户信息保存到文件中。主程序通过循环读取用户输入的选项来实现菜单功能,直到用户选择退出为止。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值