1. shell變量的輸入
shell變量除了可以直接賦值或腳本傳參外,還可以使用read命令從標准輸入得。
【語法格式】
read [參數] [變量名]
【常用參數】
-p:指定讀取值時的提示符;
-t:指定讀取值時等待的時間(秒)。
2. 舉例
范例1:read的基本讀入
[root@1-241 scripts]# read -p "please input two nomber:" a1 a2 please input two nomber:12 13 [root@1-241 scripts]# echo $a1 $a2 12 13 提示:上面read -p 的功能可以用echo和read實現。 echo -n "please input two number:" read a1 a2 以上兩句和下面的命令相當(-t 排除在外) read -t 5 -p "please input two nomber:" a1 a2 #5 秒超時退出
范例2:實踐考試題
把加減乘除計算的腳本改成通過read方式讀入整數變量:
[root@1-241 scripts]# cat test_shuangkuohao.sh #!/bin/bash a=$1 b=$2 echo "a-b=$(( $a - $b ))" echo "a+b=$(( $a + $b ))" echo "a*b=$(( $a * $b ))" echo "a/b=$(( $a / $b ))" echo "a**b=$(( $a ** $b ))" echo "a%b=$(( $a %$b ))" 范例2:的參考答案 [root@1-241 scripts]# cat test_read.sh #!/bin/bash read -p "please input two number:" a b echo "a-b=$(( $a - $b ))" echo "a+b=$(( $a + $b ))" echo "a*b=$(( $a * $b ))" echo "a/b=$(( $a / $b ))" echo "a**b=$(( $a ** $b ))" echo "a%b=$(( $a %$b ))"
范例3:利用echo命令替代和read -p的功能
[root@1-241 scripts]# cat test_read_echo.sh #!/bin/bash echo -n "please input two number:" read a b echo "a-b=$(( $a - $b ))" echo "a+b=$(( $a + $b ))" echo "a*b=$(( $a * $b ))" echo "a/b=$(( $a / $b ))" echo "a**b=$(( $a ** $b ))" echo "a%b=$(( $a %$b ))"
范例4:思考:如果讀入的不是整數,或者參數個數不是2個,以上shell腳本的執行會有什么結果?
[root@1-241 scripts]# cat test_read.sh
#!/bin/bash
while true
do
read -p "please input two number:" a b
expr $a + 0 &>/dev/null
[ $? -ne 0 ] && continue
expr $b + 0 &>/dev/null
[ $? -ne 0 ] && continue ||break
done
echo "a-b=$(( $a - $b ))"
echo "a+b=$(( $a + $b ))"
echo "a*b=$(( $a * $b ))"
echo "a/b=$(( $a / $b ))"
echo "a**b=$(( $a ** $b ))"
echo "a%b=$(( $a %$b ))"
范例5:改成命令行傳參的方式
[root@1-241 scripts]# cat test_read_if.sh
#!/bin/bash
a="$1"
b="$2"
NUM(){
echo "sh $0 num1 num2"
exit 1
}
if [ $# -ne 2 ]
then
NUM
fi
expr $a + 0 &>/dev/null
[ $? -ne 0 ] && NUM
expr $b + 0 &>/dev/null
[ $? -ne 0 ] && NUM
echo "a-b=$(( $a - $b ))"
echo "a+b=$(( $a + $b ))"
echo "a*b=$(( $a * $b ))"
echo "a/b=$(( $a / $b ))"
echo "a**b=$(( $a ** $b ))"
echo "a%b=$(( $a %$b ))"
