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
控制循环
有两个命令可以控制循环的情况
- break命令
- 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脚本中的变量