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;

posted @ 2022-03-27 13:49  RollBack2010  阅读(36)  评论(0编辑  收藏  举报