shell循环

for … in …

  • 基本用法
#!/bin/bash 
for test in alibaba baidu tenxiu didi
do 
	echo "the next state is $test"
done
echo "Thes last state is $test"
test="修改"
echo "now, Thes  state is $test"

每次for命令遍历值列表,它都会将列表中的下个值赋给 t e s t 变 量 。 test变量。 testtest变量可以像for
命令语句中的其他脚本变量一样使用。在最后一次迭代后,$test变量的值会在shell脚本的剩余部分一直保持有效。它会一直保持最后一次迭代的值(除非你修改了它)

  • 特殊字符

如果遇到特殊字符,比如单引号、空格,应该:
 使用转义字符(反斜线)来将单引号转义;
 使用双引号来定义用到单引号的值。

#!/bin/bash 
for test in I don\'t konw "this'll" work
do 
	echo "the next state is $test"
done
  • 更改字段分隔符

这和环境变量内部字段分隔符IFS有关。IFS环境变量定义了bash shell用作字段分隔符的一系列字符。默认情况下,bash shell会将下列字符当作字段分隔符:
 空格
 制表符
 换行符。
我们可以在脚本中自定义临时修改IFS

#!/bin/bash 
IFS_OLD=$IFS
IFS=$'\n'
for test in $(ls -l)
do 
	echo "the next state is $test"
done
IFS=$IFS_OLD
IFS=:   #将冒号作为字段分隔符
IFS=$'\n':;"    #将换行符、冒号、分号和双引号作为字段分隔符
  • 用通配符读取目录
#!/bin/bash 
for file in /home/ocean/.b* /home/ocean/workspace/*
do 
	if [ -d "$file" ]
	then
		echo "$file is a directory"
	elif [ -f "$file" ]
	then
		echo "$file is a file"
	fi
done
  • c风格的for
#!/bin/bash 
for (( i=1; i <= 10; i++ )) 
do 
 echo "The next number is $i" 
done 
#!/bin/bash 
for (( a=1, b=10; a <= 10; a++, b-- )) 
do 
  echo "$a - $b" 
done 

while

直到条件不满足才结束循环

  • 基本用法
#!/bin/bash 
var=10
while [ $var -gt 0 ]
do
	echo $var
	var=$[ $var-1 ]
done
  • 多个条件
#!/bin/bash 
var=10
while echo $var
	[ $var -gt 0 ]
do
	var=$[ $var-1 ]
done

until

直到条件满足才结束循环

  • 基本用法
#!/bin/bash 
var=10
until [ $var -eq 0 ]
do
	echo $var
	var=$[ $var-1 ]
done
  • 多个条件
#!/bin/bash 
var=10
until echo $var
	[ $var -eq 0 ]
do
	
	var=$[ $var-1 ]
done

break&& continue

break会提前终止离break最近的那一层循环
break n:n指定了跳出循环的等级,从里到外数,最内层的是1

IFSOLD=$IFS 
IFS=$'\n' 
for entry in $(cat /etc/passwd) 
do
	echo "$entry" 
	IFS=:
	for value in $entry
	do
		echo "$value"
	done
	break
done
IFS=IFSOLD

continue提前终止某一次循环
continue -n提前终止某一层的某一次循环

处理循环的输出

for file in /home/ocean/*
do
	if [ -d "$file" ]
	then
		echo "$file is a directory"
	fi
done > out.txt
echo "finished"
#!/bin/bash
for state in "North Dakota" Connecticut Illinois Alabama Tennessee 
do 
  echo "$state is the next place to go" 
done | sort 
echo "This completes our travels" 

实例

系统中有哪些可执行文件

#!/bin/bash
IFS=: 
for folder in $PATH 
do 
  echo "$folder:" 
  for file in $folder/* 
  do 
  if [ -x $file ] 
  then 
  echo " $file" 
  fi 
  done 
done 

参考<Linux命令行与shell脚本编程大全.第3版>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值