shell条件判断的两个特殊设备linux
/dev/nullshell
linux系统的空设备,也称为位桶,任何写入其中的数据均会被丢弃当你不想将标准化输出显示或者保存至文件时能够将文件从定向到/dev/null
express
禁止标准化输出 cat $filename > /dev/null
bash
禁止标准化错误 rm $filename > /dev/nullide
/dev/zero函数
Linux的输入设备,能够用他初始化文件,能够无限制输出0, 另外一个做用是用0去填充一个指定大小的文件测试
在条件判断语句中&&表示and ||表示or spa
脚本位置参数:
3d
在linux中参数位置从命令后起依次日后,分别是0,1,2,3。。blog
其中特殊变量有:
$?: 命令的状态结果;
$#: 传递给脚本或函数的参数的个数;
$*和$@: 引用传递给脚本或函数的参数列表;
$$:脚本执行时所产生的进程
shift [n]:表明轮替
与用户交互:
read 用于读取来自键盘的变数
格式: read [-pt] value
-p:后面直接跟提示字符
-t:后面直接接等待的时间『秒数』
[root@iZ28qzns9m4Z bashtest]# echo $a test whoaaaaa test [root@iZ28qzns9m4Z bashtest]# read -p "input:" -t 5 a input:aaaaa [root@iZ28qzns9m4Z bashtest]# echo $a aaaaa [root@iZ28qzns9m4Z bashtest]#
命令引用
格式一: `命令`
格式二:$(命令)
条件判断语句 if,then,case
只有一个判断式的语句格式:
if[条件];then
命令 ==> 当条件为真时执行,若不仅一条时用换行符隔开
fi
须要进行判断时:
if [条件];then
条件成立时,须要输入的内容
elif [条件二];then
条件成立时,须要输入的内容
else
条件与条件1、二均不成立时须要输入的内容
fi
case的判断结构也能够用于多分支:
语法格式:
case $变量名称 in
"第一变量内容")command命令;;
"第二变量内容")command命令;;
"第三变量内容")command命令;;
"第四变量内容")command命令;;
...
*)command命令;;===》在以上条件均不匹配的条件下执行
esac:
循环语句:for while until
在linux 循环语句中 list 是一个重 点,他负责循环时所须要的列表元素,是由一个或多个空格或换行符分隔开的字符串组成,把列表的每一个字符串逐个赋值给VARIABLE表示的变量;
生成格式:
数字:① list="1 2 3 4 5 6 10" ==》 for var in ${list}
② for var in {1..10}
[root@iZ28qzns9m4Z bashtest]# cat 1for.sh #!/bin/bash # #list="1 2 3 4 5 6 10" #第一种 #for i in ${list} #do # echo $i #done =================================== for i in {1..10} #第二种 do echo $i done [root@iZ28qzns9m4Z bashtest]#
(2) 直接给出列表
(3) glob
#!/bin/bash # for filename in /相对具体的路径/*; do file $filename done 注:若是不是相对具体的路径,那么脚本会报错,filename只搜索相对一级路径下的内容不对第二级子目录进行分析
(4) 命令生成
算术运算:
+, -, *, /, %, **
(1) $[$A+$B]
(2) $(($A+$B))
(3) let VARIABLE=$A+$B
(4) VARIABLE=$(expr $A + $B)
加强型赋值:
+=
sum=$[$sum+$i]
let sum+=$i
-=, *=, /=, %=
let count=$[$count+1] --> let count+=1 --> let count++
let count=$[$count-1] --> let count-=1 --> let count--
[root@iZ28qzns9m4Z bashtest]# sh 4for-2.sh 2500 [root@iZ28qzns9m4Z bashtest]# cat 4for-2.sh #!/bin/bash sum=0 for i in $(seq 1 2 100) do let "sum+=i" done echo $sum [root@iZ28qzns9m4Z bashtest]#
for 运行前测试语句,用于建立重复循环
格式: for var in ${list}
do
循环命令
done
不带列表的for循环
格式: for var
do
循环命令
done
while循环:
while CONDTION;
do
循环体
done
进入条件:当CONDITION为“真”;
退出条件:当CONDITION为“假”;
while CONDITION;
do
循环体
控制变量的修正表达式
done
while :
do
command
done
until 循环:
until命令和while命令相似,while能实现的脚本until一样也能够实现,但区别是until循环的退出状态是不为0,退出状态是为0(与while恰好相反),即whie循环在条件为真时继续执行循环而until则在条件为假时执行循环。
语法格式:
until expression
do
command
done
[root@iZ28qzns9m4Z bashtest]# cat 1until.sh #!/bin/bash declare -i sum=0 declare -i i=1 until [[ "$i" -gt 10 ]] do let sum+=i let i++ done echo $sum [root@iZ28qzns9m4Z bashtest]# sh -x 1until.sh + declare -i sum=0 + declare -i i=1 + [[ 1 -gt 10 ]] + let sum+=i + let i++ + [[ 2 -gt 10 ]] + let sum+=i + let i++ + [[ 3 -gt 10 ]] + let sum+=i + let i++ + [[ 4 -gt 10 ]] + let sum+=i + let i++ + [[ 5 -gt 10 ]] + let sum+=i + let i++ + [[ 6 -gt 10 ]] + let sum+=i + let i++ + [[ 7 -gt 10 ]] + let sum+=i + let i++ + [[ 8 -gt 10 ]] + let sum+=i + let i++ + [[ 9 -gt 10 ]] + let sum+=i + let i++ + [[ 10 -gt 10 ]] + let sum+=i + let i++ + [[ 11 -gt 10 ]] + echo 55 55 [root@iZ28qzns9m4Z bashtest]#
循环控制:
continue [n]:提早结束本轮循环,而直接进入下一轮;
break [n]:提早结束循环;
while循环:
while CONDITION; do
.......
if CONDITION2; then
break [n]
fi
done
[root@iZ28qzns9m4Z bashtest]# cat 1until.sh #!/bin/bash declare -i sum=0 declare -i i=1 until [[ "$i" -gt 10 ]] do let sum+=i let i++ if [ $i -eq 5 ]; then break fi echo $sum done [root@iZ28qzns9m4Z bashtest]# sh -x 1until.sh + declare -i sum=0 + declare -i i=1 + [[ 1 -gt 10 ]] + let sum+=i + let i++ + '[' 2 -eq 5 ']' + echo 1 1 + [[ 2 -gt 10 ]] + let sum+=i + let i++ + '[' 3 -eq 5 ']' + echo 3 3 + [[ 3 -gt 10 ]] + let sum+=i + let i++ + '[' 4 -eq 5 ']' + echo 6 6 + [[ 4 -gt 10 ]] + let sum+=i + let i++ + '[' 5 -eq 5 ']' + break [root@iZ28qzns9m4Z bashtest]#
while CONDITION; do
......
if CONDITION2; then
continue [n]
fi
......
done
死循环:
while true; do
循环体
if CONDTION; then
break
fi
done
until false; do
循环体
if CONDITION; then
break
fi
done
while循环的特殊用法:
遍历文件的每一行:
while read VARIABLE; do
循环体
done < /PATH/FROM/SOME_FILE
for循环的特殊用法:
for ((expr1;expr2;expr3)); do
循环体
done
expr1: 定义控制变量,并初始赋值;
expr2: 循环控制条件;
进入条件:控制条件为“真”
退出条件:控制条件为“假”
expr3: 修正控制变量