一、判断语句
①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的时候才会结束
⑤死循环的处理方式
- 如果终端可以打开该程序,输入
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