shell脚本结构化命令

Posted zqq_hello_world

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell脚本结构化命令相关的知识,希望对你有一定的参考价值。

if-then语句

if-then语句相当于其他编程语言中的if语句,其他编程语言判断是true或者false,但是if-then语句会执行if后面的那条命令,如果命令的退出状态码是0(0表示执行成功),则位于then语句部门的命令就不会被执行,否则不会执行。

#if-then语句格式 
if [command] 
then    
	[commands] 
fi
#例子 
if pwd 
then    
	echo "pwd命令执行成功" 
fi         

if-then-else语句

if-then-else语相当于其他编程语言的if-else语句,如果if语句退出状态码不为0,则执行else命令。

#if-then-else语句格式 
if [command] 
then    
	[commands] 
else    
	[commands] 
fi
#例子 
if pwd 
then    
	echo "if后指令执行成功" 
else    
	echo "if后指令执行失败" 
fi           

嵌套if

当需要检查多种判断时,可以使嵌套if-then语句,也可以使用else的另一种形式:elif。

#嵌套if-then 
if [command] 
then    
	[commands] 
else    
	[commands]    
	if [command]    
	then        
		[commands]    
	fi 
fi   
#elif 
if [command] 
then    
	[commands] 
elif 
	[command] 
then    
	[commands] 
else    
	[commands] 
fi          

test命令

在shell脚本中,if等判断都是判断后面跟着的命令返回的状态码是否为0来确定是走then还是elif语块,并没有直接判断其他形式的条件。test命令提供了在if-then语句中测试不同条件的途径,如果条件不成立test命令会退出并返回不为0的状态码,if-then语句就不会被执行。

test命令各市:test [condition]

[condition]是test命令要测试的一系列参数和值。如果[condition]部分不写时,它会以非0的状态码退出(会执行else语句)。

if test [condition] 
then    
	[commands] 
fi

test命令测试变量是否有内容

#!/bin/bash 
var1="zqq" 
if test $var1 
then    
	echo "var1 is not empty ,var1=$var1" 
else    
	echo "var1 is empty" 
fi

base shell提供了中括号[]测试条件的方法,无需在语句中生命test命令。注意第一个括号之后和第二个括号前需要加空格,否则会报错。

if [ condition ] 
then    
	[commands] 
fi

复合条件测试

# &&判断   
[ condition1 ] && [ condtion2 ] 
# ||s判断 
[ condition1 ] || [ condition2 ]

case命令

如果有很多个条件如果用if-then去检查,则会写很多elif,用case命令就可以节省很多elif。格式如下。

case [variable] in 
	pattern1 | pattern2) [commands];; 
	pattern3) [commands];; 
	pattern4) [commands];; 
	*) default [commands];; 
esac

for命令

for命令跟其他编程语言for效果一样,循环执行语句直到执行完最后一个。

for var in list 
do
	[commands] 
done

循环数组

#!/bin/bash 
#定义数组 
array=("a" "b" "c" "d") 
#for命令打印数组元素 
for arr in $array[*] 
do    
	echo "数组元素为:$arr" 
done

从命令中取值

#!/bin/shell 
#从命令中取值 
#创建文本/home/atext 
for s in $(cat -n /home/atext) 
do    
	echo "文本的值为:$s" 
done

通配符读取目录

#!/bin/bash 
#通配符读取目录 
for file in /home/file/* 
do    
	echo "file path:$file" 
done    

c语言风格的for循环

#!/bin/bash 
#循环输入1-10 
for((i=1; i <=10 ;i++)) 
do    
	echo "i val is :$i" 
done
#!/bin/bash 
#迭代多个变量,i,j 
for((i=1,j=10; i<=10 ;i++,j--)) 
do    
	echo "i=$1,j=$j" 
done

while命令

while命令某种意义上相当于if-then命令和for命令的混杂题。while命令允许定义一个测试命令,然后执行一组命令,如果测试命令退出状态码是0(执行成功)就会一直执行循环体内命令。

while test [command] 
do   
	[commands] 
done
#!/bin/bash 
var1=10 
while [ $var1 -gt 0 ] 
do    
	echo $var1    
	var1=$[ $var1 - 1 ] 
done

until命令

until命令和while命令工作的方式完全相反。until命令要求知道一个通常返回非0的退出状态码命令。只有测试命令的退出状态码不为0(执行失败),才会执行循环中列出的命令。

until test [command] 
do    
	[commands]    
done 

控制循环

有两个命令可以控制循环的情况

  1. break命令
  2. continue命令

break命令

break命令可以跳出任意循环,包括嵌套的循环,默认情况下break只会跳出当前循环,无法跳出父循环及更上层循环。break命令可以接收参数来指定跳出几层循环,默认为1。

命令格式:break [n]

[n]为跳出的层数,默认为1。

#!/bin/bash 
#使用break跳出循环 
for var1 in 1 2 3 4 5 6 7 8 9 
do    
	if [ $var1 -eq 5 ]    
	then        
		break;    
	fi    
	echo "var1=$var1"     
done 
#使用break跳出多层循环 
for((i=1; i<=10 ;i++)) 
do    
	for((j=1; j<=10 ;j++))    
	do        
		if[ $j -eq 5 ]        
		then            
			break 2;        
		fi    
	done 
done

continue命令

continue命令可以提前中止某次循环,但不会完全终止整个循环,会进入到下一次循环。

#!/bin/bash 
for((i=0; i<=10 ;i++)) 
do    
	if[ $i -eq 5 ]    
	then        
		continue;    
	fi 
done

处理循环输出

循环内有很多echo的输出,有时候不想直接打在屏幕上,希望向日志一样打到文件里。这是后可以用输出重定向符号(>>)添加到循环结束done关键字后。

#!/bin/bash 
for ((i=1; i<=10; i++)) 
do    
	echo "输出结果:i=$i" 
done >> /home/test.log

以上是关于shell脚本结构化命令的主要内容,如果未能解决你的问题,请参考以下文章

shell脚本结构化命令笔记

shell脚本结构date命令变量

六十七shell脚本介绍shell脚本结构和执行date命令用法shell脚本中的变量

shell脚本介绍结构和执行date命令用法shell脚本中的变量

shell脚本介绍,shell脚本结构和执行,date命令用法,shell脚本中的变量

shell脚本介绍shell脚本结构和执行date命令用法shell脚本中的变量