Day 12 shell语法及程序若干
1. 现归纳一下shell中的运算符:
+:对两个变量做加法。
-:对两个变量做减法。
*:对两个变量做乘法。
/:对两个变量做除法。
**:对两个变量做幂运算。
%:取模运算,第一个变量除以第二个变量求余数。
+=:加等于,在自身基础上加第二个变量。
-=:减等于,在第一个变量的基础上减去第二个变量。
*=:乘等于,在第一个变量的基础上乘以第二个变量。
/=:除等于,在第一个变量的基础上除以第二个变量。
%=:取模赋值,第一个变量对第二个变量取模运算,再赋值给第一个变量。
程序:实现数学函数S=3(xy)+4x2+5y+6的运算。在程序中以位置变量的方式输入x与y的值。如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #1/bin/bash 2 #实现S=3(xy)+4x**2+5y+6的运算 3 4 read -p 'input x: ' x 5 read -p 'input y: ' y 6 #S = $[3*x*y]+$[x**2*4]+$[5*y]+6 7 S=$[3*x*y+x**2*4+5*y+6] 8 echo $S
2. 运算常用的命令:
a. 用let指示数学运算。可以先将运算的结果赋值给变量b,运算命令是b=let 1 + 2。然后用echo $b来输出b的值。如果没有let,则会输出1+2。
b. 用$[]表示数学运算。将一个数学运算写到$[]符号的中括号中,中括号中的内容将先进行数学运算。例如命令echo $[1+2],将输出结果3。
c. 用expr改变运算顺序。可以用echo `expr 1 + 2`来输出1+2的结果,用expr表示后面的表达式为一个数学运算。需要注意的是,`并不是一个单引号,而是“Tab”键上面的那个符号。
d. 用bc表示数学运算。可以结合echo命令一起使用,例如:echo “3.21*2” | bc 来计算 3.21*2 这种浮点运算
e. 使用awk表示数学命令.如:echo 2 | awk '{print $1**32}'
3、关系操作符
< 小于
> 大于
>= 大于等于
<= 小于等于
== 等于
!= 不等于
&& 逻辑与(都对)
|| 逻辑或(任意对,从左往右)
$ 符号在Linux系统里面用于获取一个变量的值,例如:
#!/bin/bash --------指定编译shell环境为bash
STR="Hello World!"----设置STR的变量值为Hello World!
echo $STR ------ 用echo命令读取STR变量的数值。这里如果不加$, 输出结果是STR,加上$,输出结果就是Hello World!。
测试!!!
比较数字,使用(( )) ###数字与比较符号可以紧邻着
其他测试使用 [[ ]] ###里面中括号前后空一格,语法生效
包含数字比较的混合测试,使用标准语法
程序:验证登录用户与密码是否正确?
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
程序:判断文件类型。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
程序:查询成绩。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #!/bin/bash 2 3 read -p 'input your score: ' score 4 5 if [ $score -eq 100 ];then 6 echo '完美' 7 elif [ $score -ge 90 -a $score -lt 100 ];then 8 echo '优秀' 9 elif [ $score -ge 60 -a $score -lt 90 ];then 10 echo '良好' 11 elif [ $score -ge 0 -a $score -lt 60 ];then 12 echo '再接再厉' 13 else 14 echo '别捣乱!' 15 16 fi
程序:猜年龄。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #!/bin/bash 2 oldboyage=99 3 4 read -p 'input oldboy age: ' age 5 6 if [ $age -eq $oldboyage ];then 7 echo '你真牛逼!' 8 elif [ $age -gt $oldboyage ];then 9 echo '太大了!' 10 elif [ $age -lt $oldboyage ];then 11 echo '太小了' 12 fi
程序:while循环。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #!/bin/bash 2 3 i=1 4 5 while ((i<10)) 6 do 7 echo $i 8 ((i++)) 9 sleep $i 10 done
程序:for循环。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #!/bin/bash 2 3 for i in {1..10} 4 do 5 echo $i 6 sleep $i 7 done
1、如何使用vi/vim显示行号(永久):