shell for与while循环

shell for与while循环

一、使用for循环遍历命令的执行结果

for 循环的语法

  • for 参数 in 列表
  • do 执行的命令
  • done 封闭一个循环
# 循环遍历列表中0~9数字
[root@iZbp1e44zna0rzyna76eszZ lvhuiqi]# for i in {0..9}; do echo "hello"; echo $i ; done
hello
0
hello
1
hello
2
hello
3
hello
4
hello
5
hello
6
hello
7
hello
8
hello
9

使用反引号或$()方式执行命令,命令的结果当作列表进行处理

# 使用一个命令来产生列表,然后进行读取  

# 1.创建mp3的三个文件
[root@iZbp1e44zna0rzyna76eszZ lvhuiqi]# touch a.mp3 b.mp3 c.mp3

# 2.查看创建的mp3的文件
[root@iZbp1e44zna0rzyna76eszZ lvhuiqi]# ls *.mp3
a.mp3  b.mp3  c.mp3

# 3.使用shell命令的反引号进行执行命令  
# 将文件名 ls *.mp3的进行依次循环, 使用mv 将当前文件改名为mp4结尾 
[root@iZbp1e44zna0rzyna76eszZ lvhuiqi]# for filename in `ls *.mp3`; do
> mv $filename $(basename $filename .mp3).mp4
> done

# 4.查看当前修改后的文件
[root@iZbp1e44zna0rzyna76eszZ lvhuiqi]# ls *.mp4
a.mp4  b.mp4  c.mp4

$(basename $filename .mp3).mp4 表示把当前文件名.mp3结尾的修改成.mp4结尾

二、使用for循环遍历变量或文件内容

列表中包含多个变量,变量用空格分隔

对文本处理,要使用文本查看命令取出文本内容

  • 默认逐行处理

三、C语言风格的for命令

for ((变量初始化;循环判断条件;变量变化))

do

​ 循环执行命令

done

# 用c语言实现0~10的循环遍历
[root@iZbp1e44zna0rzyna76eszZ lvhuiqi]# for (( i=0;i<=10;i++))
> do
> echo "$i"
> done
0
1
2
3
4
5
6
7
8
9
10

四、while 循环

语法如下

while test测试是否成立

do

​ 命令

done

# 使用while循环,((a++))表示每次遍历执行时a都会 a+1
[root@iZbp1e44zna0rzyna76eszZ lvhuiqi]# a=1
[root@iZbp1e44zna0rzyna76eszZ lvhuiqi]# while [ $a -lt 10 ]; do ((a++)); echo $a; done
2
3
4
5
6
7
8
9
10

五、死循环

使用:方式来进行构建死循环。

[root@iZbp1e44zna0rzyna76eszZ lvhuiqi]# while : ;do echo "bash";done
# 输出结果:
bash
bash
bash
.... 无限循环

六、until 循环

until 循环与 while 循环相反,循环测试为假时,执行循环,为真时循环停止

# 使用unitl 来判断  5 < 4条件为假会一直打印 until使用
[root@iZbp1e44zna0rzyna76eszZ lvhuiqi]# until [[ 5 < 4 ]]; do echo "until使用"; done

七、break和contine语句

  1. 循环和循环可以嵌套

    [root@iZbp1e44zna0rzyna76eszZ lvhuiqi]# for name in /home/lvhuiqi/*.sh;
    > do
    		# 判断/home/lvhuiqi/目录下的所有.sh文件,哪些是可执行文件并且进行运行
    >   if [ -x $name ]; then
    >      . $name
    >   fi
    > done
    -bash other....
    
  2. 循环中可以嵌套判断,反过来也可以嵌套

  3. 循环可以使用break和 continue 语句在循环中退出

    break跳出整个循环体

    # 到5以后跳出循环体
    [root@iZbp1e44zna0rzyna76eszZ lvhuiqi]# for i in {0..9};
    > do
    >   if [ $i -eq 5 ] ; then
    >   break
    >   fi
    > echo $i
    > done
    0
    1
    2
    3
    4
    

    contine跳出当前循环体

    # 跳出等于5的循环体,继续往后执行
    [root@iZbp1e44zna0rzyna76eszZ lvhuiqi]# for i in {0..9};
    > do
    >   if [ $i -eq 5 ]; then
    >   continue
    >   fi
    > echo $i
    > done
    0
    1
    2
    3
    4
    6
    7
    8
    9
    

八、使用循环对命令行参数的处理

  1. 命令行参数可以使用 $1 2... 2... 2...{10}…$n进行读取

  2. $0表示脚本名称

  3. $ 和 $@ 代表所有位置参数*

  4. $# 代表位置参数的数量

举个栗子,使用for来进行处理位置参数

#! /bin/bash

for pos in $*;
do
  if [ "$pos" = "abc" ]; then
    echo $pos
  fi
done
# 传入值 abc 可以匹配
[root@iZbp1e44zna0rzyna76eszZ lvhuiqi]# ./test.sh abc
abc

# 传入不是 abc 不可以匹配
[root@iZbp1e44zna0rzyna76eszZ lvhuiqi]# ./test.sh abcd

举个栗子,使用while来进行处理位置参数

#! /bin/bash

# 根据传递的参数数量进行比较,只要符合满足数量大于等于1
while [ $# -ge 1 ]
do
  echo $#
  echo "do something"
  shift
done

shift 作用是可将参数依次剔除掉,比如a b c d e 那么会将 a剔除掉,变成 b c d e 下次将 b 剔除掉, 变成 c d e

# 执行并返回结果
[root@iZbp1e44zna0rzyna76eszZ lvhuiqi]# ./test.sh a b c d e
5
do something
4
do something
3
do something
2
do something
1
do something
#! /bin/bash

while [ $# -ge 1 ]
do
	# 如果传递的第一个参数为 "help" 字符串, 那么将打印出来
  if [ "$1" = "help" ]; then
     echo $1
  fi
  shift
done
[root@iZbp1e44zna0rzyna76eszZ lvhuiqi]# ./test.sh a help b c
help
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值