【shell命令】流程控制、函数
条件判断:[ condition ]、test
数值测试:在test、[]中用下列写法,在(())和[[]]中用==、!=、>、>=、<、<=
-eq --等于则为真 案例:[$n -eq 1 ] && echo 1 || echo 0
-ne --不等于则为真
-gt --大于则为真
-ge --大于等于则为真
-lt --小于则为真
-le 小于等于则为真
字符串测试:
= --等于则为真 说明:=两端必须有空格
!= --不等于则为真
-z --长度为0则为真 案例:[ -z "" ] && echo 1||echo 0
-n --长度不为0则为真 案例:[ -n "" ] && echo 0||echo 1 [ ! -z "" ]&& echo 0||echo 1 --两个案例结果相同
$ --检测字符串长度是否不为空,不为空返回true 案例:[ $a ] 返回true
文件测试:
-e --如果文件存在则为真 案例: [ -e 1.txt ] && echo 1 || echo 0 --如果文件存在输出1,否则输出0
-r --如果文件存在且可读则为真
-w --如果文件存在且可写则为真
-x --如果文件存在且可执行则为真
-s --如果文件存在且至少有一个字符则为真
-d --如果文件存在且为目录则为真
-f --如果文件存在且为普通文件则为真
-c --如果文件存在且为字符型特殊文件则为真
-b --如果文件存在且为块特殊文件则为真
-nt --文件1 -nt 文件2 判断文件1修改时间是否比文件2新
-ef --文件1 -ef 文件2 判断文件1与文件2是否为同一文件
多重条件判断:
-a:逻辑与,在[[]]中用&& 案例:[ $n -eq 1 -a -f 3.txt ] && echo 1 || echo 0
-o:逻辑或,在[[]]中用|| 案例:判断1 -o 判断2
!:逻辑非 案例:!判断
test案例
Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。
num1=100
num2=100
if test $[num1] -eq $[num2]
then
echo '两个数相等!'
else
echo '两个数不相等!'
fi
if..else
if [ condition ]
then
command1
fi
if [ condition ]
then
command1
elif [ condition2 ]
then
command2
else
command3
fi
案例1:
# 接收键盘输入参数
read -p "input param1:" param1
if [ $param1 -eq '1' ]
then
echo 1
else
echo 'other'
fi
案例2:在(())和[[]]中用==、!=、>、>=、<、<=
read -p "input param1:" param1
if (( $param1 == '1' ))
then
echo 1
else
echo 'other'
fi
案例3
read -p "input param1:" param1
[ $param1 -eq 1 ] && {
echo 1
} || {
echo 'other'
}
可以使用
[ condition ] && command1 || command2
语句代替if..else..
for循环
for n in 1 2 3 4 5
do
echo $n
done
案例1:遍历参数
for v in $@;do
echo $v
done
案例2:遍历文件
for file in `ls /etc`;do
echo "${file}.txt"
done
案例3:遍历数组
for i in 1 2 3 4;do
echo $i
done
for i in a b c d; do
echo $i
done
while循环
案例1:
n=1
while test $n -lt 5
do
echo $n
n=$((n+1))
done
案例2:(逐行读取文件)
while read line
do
echo $line
done < 1.txt
案例3:(逐行读取文件,与上个案例相同)
exec < 1.txt
while read line
do
echo $line
done
until
与while相反,当条件为true时停止
case
case “字符串变量” in
值1) 指令1
;;
值2) zhiling 2
;;
*) 指令3
esac
case案例
read -p "input:" value
case $value in
1)
echo "1"
;;
2)
echo "2"
;;
*)
echo "*"
esac
函数
函数语法
1、function_name(){echo 'i'm function';}
2、function function_name(){echo 'i'm function';}
函数参数:$1、$2、$3、$4...
$0:表示父脚本名称
$#:参数个数
$?:返回参数
$*:全部参数
$@:全部参数
案例
#! /bin/bash
function sum(){
result=0;
for i in $*
do
result=$(($result+$i))
done
return $result
}
sum 1 2 3
echo $?