【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 $?
posted @ 2022-05-31 22:32  .Neterr  阅读(16)  评论(0编辑  收藏  举报