shell语法(3)


一、判断语句

①if…them形式

if condition
then
	语句1
	语句2
fi

例如

a=3
b=4

if [ "$a" -lt "$b" ] && [ "$a" -gt 2 ]
then
	echo ${a}在范围内
fi
#输出,3在范围内

②单层if-else

if condition
then
	语句1
	语句2
else
	语句1
	语句2
fi

例如

a=3
b=4

if ! ["$a" -lt "$b"]
	echo ${a}不小于${b}
else
	echo ${a}小于${b}
fi

③多层if-else

if condition
then
	语句
elif condition
then
	语句
else 
then
	语句
fi

④case语句

case 变量($a) in
	1)
		语句
		;;
	2)
		语句
		;;
	*)
		语句
		;;
esac

二、循环结构

① for var in v1 v2 v3

#命令格式
for var in v1 v2 v3
do
	语句1
	语句2
done

例如

for i in a 2 cc
do
	echo $i
done
#输出a /n 2 /n cc
#------------------------
for file in 'ls'(''表示获取某个命令的stdout结果,等同于$())
do
	echo $file
done
#输出当前目录下的文件名
#------------------------
for i in $(sec 1 10)
do
	echo $i
done
#输出1-10
#------------------------
for i in (1..20)  #可以输出字母,也可以反向输出
do
	echo $i
done
#输出1-20

②for ((…; …; …))

for ((i = 1; i <= 10; i++))
do
	echo $i
done
#输出1-10

③while…do…done

while read name
do
	echo $name
done
#读取什么就输出什么

④untill…do…done

当条件为真的时候才结束,否则一直循环,当然可以直接用Ctrl + c直接杀死现在的进程!

untill [ "${word}" == "yes" ]
do
	read -p "please input yes" word
done
#只有当用户输入yes的时候才会结束

⑤死循环的处理方式

  1. 如果终端可以打开该程序,输入Ctrl + c就可以结束了!
    • 使用top命令找到该进程的PID,也就是第一列的数字
    • 输入kill -9 PID即可关掉这个进程

三、函数

bash中的函数类似于c中的函数,但是返回值是exit code

如果想要获取函数最后的一个stdout的结果,可以通过echo输出到stdout中然后通过${function_name}来获取stdout中的结果。

如果不写return的时候默认return 0

#示例1
func() {
	name=wjw
	echo "hello $name"
}
func #直接调用,输出hello wjw

#示例2
func() {
	name=wjw
	echo "$name"
	return 123
}

output=$(func)   #保存wjw
ret=$?			 #保存123

#示例3
func() {
	if [$1 -le 0]
	then
		echo 0
		return 0
	fi
	sum=$(func 'expr $1 - 1')
	echo $(expr $sum + $1)
}
echo $(func 10) #递归输出从0-10的累加和!

四、exit命令

  • exit命令用来退出当前shell进程,并返回一个退出状态
  • exit命令可以接受一个整数值作为参数,代表退出状态,如果不指定,默认为0
  • 退出状态只能介于0-255之间的整数,只有0代表正常退出
#! /bin/bash

if [ $# -ne 1 ] #如果参数等于1就正常退出,不等于1就非正常退出
then
	echo "NO"
	exit 1
else
	echo "YES"
	exit 0
fi

如果执行该脚本

acs@2ba77538d358:~$ chmod +x test.sh
acs@2ba77538d358:~$ ./test.sh wjw 18
acs@2ba77538d358:~$ echo $?  #输出的是1
acs@2ba77538d358:~$ ./test.sh wjw
acs@2ba77538d358:~$ echo $?  #输出的是0

文章作者: sheepice
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 sheepice !
  目录