自学shell编程——补充知识点——键盘输入read、数学运算
1. 在执行*.sh文件过程中键盘输入一个值,而不是命令行传参,使用read命令
复习知识点:命令行参数在shell脚本中对应$1、$2、$3……,直接使用即可
read如何使用,这里列举两种方式
#!/bin/bash
#出现一个提示语句,并将键盘输入的结果赋值到一个指定变量中
echo "please input a number"
read num1
echo $num1
read -p "please input a number:" num2
echo $num2
#两个都可以,你会发现第二个更舒服
#输入两个值
read -p "please input a2 number:" num3 num4
num5=`expr $num3 + $num4` #假设输入3 4;对输入的数值进行计算:7
num5=$[$num3-$num4] #输出-1
let num5=$num3*$num4 #输出12
num6=$num3+$num4 #输出3+4
echo $num3;echo $num4;echo $num5
2. shell脚本的数学运算,包括+、-、*、/、%(加减乘除取余)
前面例子中已经给出了三种方式,这里做一个总结。expr命令、$[]、let
#1. 使用expr命令,格式为
sum=`expr num1 运算符 num2`
#2. 使用$[],格式为
sum=$[$num1运算符$num2]
#3. 使用let,格式为
let sum=$num1运算符$num2
3. shell脚本中数值变量定义
前面提到shell的变量只有字符串一种类型,如果需要做数值运算,可以使用2提到的3种方法。当然,你也可以选择再定义变量时直接定义为数值类型(declare:设定变量值和属性)
#使用declare
declare -i n=1
n=$n+1
echo $n #输出2。如果没有前面的declare -i,则输出结果1+1
4. trap捕捉(其实我也不懂,这就是学的课程里面有的,我就列出来,大家自行查看)
trap命令类似于系统编程中的signal函数,用于捕捉信号。根据捕捉到的信号进行对于的操作。** 该功能多用于系统维护,平常自己的shell脚本可能用不到,如果你需要了,再认真学习。 **
- ** 格式:trap 响应内容 信号 **
- 信号值查看:kill -l 和trap -l,共有64个信号值。
其中最常用为:18)SIGCONT 19)SIGSTOP 9)SIGKILL。 - 举个例子。SIGINT信号是用户键盘输入INTR字符或者使用ctrl+c触发。shell脚本接收到SIGINT信号(即接收到INTR字符或者ctrl+c),打印字符串hello。
#!/bin/bash
fun()
{
echo " hello"
}
trap fun SIGINT #也可以写成INT或者2
#这里写一个死循环,让shell脚本一直执行
declare -i n=0
while test $n -eq 0
do
n=0
done
#执行:./trap.sh #你在键盘输入INTR字符或者ctrl+c,会在后面接收到 hello。
这里就要考虑,将ctrl+c识别为SIGINT信号,那么该如何终止该程序。使用命令killall -9 trap.sh。
总结:书写注意
- 对于特殊字符,如*,\,$,?等等这些有特殊含义的字符,如果要进行简单使用,注意前面加转义符\。如输出字符串$1,你不能直接echo $1或者echo “$1”,你要使用 echo '$1’或者echo"$1"。这样才能保证输出结果为字符串$1。
- 命令行输入参数时,习惯先判断参数个数是否满足
- 输出的变量中存在连续空格时,使用echo “$str”;而不是echo $str。后者输出只保留一个空格。