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;
 
                     
                    
                 
                    
                
 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号