脚本编程大全 第十三章 更多结构化命令

#!/bin/bash

for tes in   Amer Bana Cnada Docum Fir 
do 
	echo "Now  ->> $tes"
done 


echo "tes is :$tes"   #for 语句结束后tes仍保存最后的值
#读取复杂值

for tes in I don't know how this'll work    
do
	echo "word:$tes"
done

#输出   
Now  ->> Amer
Now  ->> Bana
Now  ->> Cnada
Now  ->> Docum
Now  ->> Fir
tes is :Fir
word:I
word:dont know how thisll
word:work

解决: 转义单引号


#!/bin/bash
 #分割包含空格的组 
for tes in "ame aa" "bme bb" "cme cc"
do 
	echo "$tes"
done

#从命令中读取值

#!/bin/bash

#若是文件中含有空格 则同样以空格作为分割符号
#IFS=$'\n'    更改字段的分割符号 
#IFS internal field separator  内部字段分隔符
#'\n'  整个的为回车符号
#若要制定多个IFS 可直接串起来  如指定回车 冒号 分号  双引号 
# IFS=$'\n':;"
 

filename=$1
lis=$( cat $filename )

for tes in $lis
do
	echo "$tes---"
done
#通配附读取命令
#!/bin/bash

touch /home/user/"abc ame.txt" 
temp="`pwd`/*"
for file in /home/user/* $temp    #可同时合并多个目录进行搜索 
do
	if [ -d "$file"  ]  #Linux中 文件目录名包含空格也是合法的
	then
	echo "$file is a dir"
	else
		echo "$file not a dir"
	fi
done

C语言风格的for

bash for 循环的基本格式
for (( variable assignment ; condition ; iteration process ))
不同于以往bash shell的标准:

  • 赋值变量可以有空格
  • 条件中的变量不以美元符号开头
  • 迭代过程的算式未用expr命令格式
#没有空格之类的要求 接近于C 但是输出语句中需要$
#!/bin/bash

for ((i= 1;i<=10 ;i++ ))
do 
	echo "$i"
done 

#使用多个变量 

#bin/bash
for (( a=10 , b=20 ; a<=20;a++,b--))
do
	echo "$a<---->$b"
done 

while

while 语句中定义的 test command与if-then无异。可以使用任何普通的bash shell命令。


#!/bin/bash
var1=10
while [ $var1 -gt 0  ]
do 
	echo "$var1"
	var1=0
done
#多个测试命令
#while 是否执行取决与?????

#!/bin/bash

var1=100
while "` cd -`"   [ $var1 -gt 20 ]  
do
	echo "$var1 "
	var1=10
done  

until
# shell中变量的自加操作 
#!/bin/bash

var1=100
until [ $var1 -eq 0  ]
do 
	echo -n  "$var1 "
	var1=$[$var1-1] 
done 

嵌套循环

#!/bin/bash

for (( a=1 ;a<10;a++ ))
do
	echo  -n "a:$a  "
	for (( b=2 ;b<30;b))
		do 
		b=$[$b+5]
		echo "b:$b"
		done
	
done

循环处理文件数据
#!/bin/bash

#$(cat /etc/passwd)  要熟悉这种方法
#$[] 运算 

ifstemp=$IFS
IFS=$'\n'

for line in $(cat /etc/passwd)
do
	echo "Values in $line!"
	IFS=:
	for val in $line
		do 
		echo -n "$val  "
		done
		echo ""
done

break跳出外部循环 输出重定向

# break n    指定跳出到上层第n个循环(本循环为第一个)
#!/bin/bash

for (( a=1;a<4;a++ ))
do
	echo "OuterLoop:$a"
	for (( b=1;b<=4;b++ ))
	do
	echo "	 InnerLoop:$b"
	if [ $b -eq  3  ] && [ $a -eq 2 ]
		then 
		break 2
	fi
	done  
done	>> break_output.txt   # 程序执行错误会直退出 无法重定向
done | sort    #对输出排序    
PRACTICE

#!/bin/bash

ifstemp=$IFS
IFS=:
n=0
filename=execfile.txt
touch $filename
chmod 777 $filename

for dir in $PATH
do
	echo "$dir"
	for file in $dir/*
	do
		#echo "$file"
		if [ -x $file  ]
		then 
			echo "$n  $file"
			n=$[$n+1]
		fi 
	done

done >> $filename






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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值