4.流程控制&read&函数
目录
if
语法
方式一
if [ 条件判断式 ];then
满足条件做的事情
fi
方式二
if [ 条件判断式 ]
then
满足条件做的事情
fi
注意事项:
- [ 条件判断式 ],中括号和条件判断式之间必须有空格
- if后要有空格
Demo
#!/bin/bash
#输入一个值(read为控制台输入命令,执行脚本后会等待输入)
read index
#判断
if [ $index = 'a' ];then
echo "输入的为A:"$index
elif [ $index = 'b' ]
then
echo "输入的为B:"$index
fi
case
语法
case $变量名 in
"值1")
如果变量的值等于值1,则执行程序1
;;
"值2")
如果变量的值等于值2,则执行程序2
;;
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
注意事项:
- case行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。
- 双分号“;;”表示命令序列结束,相当于java中的break。
- 最后的“*)”表示默认模式,相当于java中的default。
Demo
#!/bin/bash
read index
case $index in
"a")
echo "输入的为A:"$index
;;
"b")
echo "输入的为B:"$index
;;
*)
echo "都没匹配上,输入的是"$index
;;
esac
for
语法
方式一
for (( 初始值;循环控制条件;变量变化 ))
do
程序
done
方式二
for 变量 in 值1 值2 值3…
do
程序
done
Demo
#方式一
#!/bin/bash
count=0;
for((i=0;i<10;i++))
do
count=$[$count+1]
echo "本次循环值:"$count
done
echo $count
#***************************
#方式二(01) 依次打印 a b c
#!/bin/bash
for i in a b c
do
echo $i
done
#方式二(02) 依次打印 a b c
#!/bin/bash
arr="a b c"
for i in $arr
do
echo $i
done
$*与$@区别
# $* 和 $@ 不加引号时,两者一样
# $* 和 $@ 加引号时,"$*"会把所有参数当作一个字符串输出,"$@"仍会拆分成数组后循环
for i in "$*"
do
echo $i
done
echo "============="
for i in "$@"
do
echo $i
done
while
语法
while [ 条件判断式 ]
do
程序
done
Demo
i=0
while [ $i -lt 10 ]
do
echo "循环第"$i"次"
i=$[$i + 1]
done
echo "跳出while,值为:"$i
read
语法
read(选项)(参数)
选项:
- p:指定读取值时的提示符;
- t:指定读取值时等待的时间(秒)。
参数
变量:指定读取值的变量名
Demo
#2秒钟未输入自动结束
#!/bin/bash
read -p "请输入" -t 2 inputval
echo "--"$inputval"--"
if [ $inputval ]
then
echo "输入值为:"$inputval
fi
if [ ! $inputval ];then
echo "超时未输入"
fi
函数
basename
语法
basename [string / pathname] [suffix]
#basename命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来
#suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉。
Demo
basename /application/shell/parameter.sh
#会输出 parameter.sh
basename /application/shell/parameter.sh .sh
#会输出 parameter
dirname
语法
dirname 文件绝对路径
#从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分)
Demo
dirname /application/shell/parameter.sh
#会输出 /application/shell
自定义函数
语法
[ function ] funname[()]
{
Action;
[return int;]
}
- 必须在调用函数地方之前,先声明函数,shell脚本是逐行运行。不会像其它语言一样先编译。
- 函数返回值,只能通过$?系统变量获得,可以显示加return返回,如果不加,将以最后一条命令运行结果,作为返回值。return后跟数值n(0-255)
Demo
#!/bin/bash
function sum()
{
val=$[ $1 + $2 ]
echo "输入两数字之和为:"$val
}
read -p "输入第一个数字: " n1;
read -p "输入第二个数字: " n2;
sum $n1 $n2;