基本运算符

val=`expr 2 + 2`
表达式和运算符之间要有空格
条件表达式要放在方括号之间,并且要有空格

●算术运算符
+ 加法 `expr $a + $b` 结果为 30。
- 减法 `expr $a - $b` 结果为 10。
* 乘法 `expr $a \* $b` 结果为 200。
/ 除法 `expr $b / $a` 结果为 2。
% 取余 `expr $b % $a` 结果为 0。
= 赋值 a=$b 将把变量 b 的值赋给 a。
== 相等。 相同则返回 true。 [ $a == $b ] 返回 true。
!= 不相等。 不相同则返回 true。[ $a != $b ] 返回 true。

a=10
b=20
val=`expr $a + $b`
val=`expr $a - $b`
val=`expr $a \* $b` # * 前边必须加 \
val=`expr $b / $a`
val=`expr $b % $a`

if [ $a == $b ]
then
echo "a 等于 b"
fi
if [ $a != $b ]
then
echo "a 不等于 b"
fi

●关系运算符
关系运算符只支持数字,不支持字符串,除非字符串的值是数字.
-eq == [ $a -eq $b ] 返回 false。
-ne != [ $a -ne $b ] 返回 true。
-gt > [ $a -gt $b ] 返回 false。
-lt < [ $a -lt $b ] 返回 true。
-ge >= [ $a -ge $b ] 返回 false。
-le <= [ $a -le $b ] 返回 true。

●布尔运算符
! 非运算 [ ! false ] 返回 true。
-o or [ $a -lt 20 -o $b -gt 100 ] 返回 true。
-a and [ $a -lt 20 -a $b -gt 100 ] 返回 false。

●逻辑运算符
&& AND [[ $a -lt 100 && $b -gt 100 ]] 返回 false
|| OR [[ $a -lt 100 || $b -gt 100 ]] 返回 true

●字符串运算符
a="abc"
b="efg"
= 检测两个字符串是否相等,相等返回 true。 [ $a = $b ] 返回 false。
!= 检测两个字符串是否相等,不相等返回 true。 [ $a != $b ] 返回 true。
-z 检测字符串长度是否为0,为0返回 true。 [ -z $a ] 返回 false。
-n 检测字符串长度是否为0,不为0返回 true。 [ -n $a ] 返回 true。
str 检测字符串是否为空,不为空返回 true。 [ $a ] 返回 true。

●文件测试运算符
-b file 检测块设备文件,如果是,则返回 true。 [ -b $file ] 返回 false。
-c file 检测字符设备文件,如果是,则返回 true。 [ -c $file ] 返回 false。
-d file 检测目录,如果是,则返回 true。 [ -d $file ] 返回 false。
-f file 检测普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 [ -f $file ] 返回 true。
-g file 检测设置了 SGID 位,如果是,则返回 true。 [ -g $file ] 返回 false。
-k file 检测设置了粘着位(Sticky Bit),如果是,则返回 true。 [ -k $file ] 返回 false。
-p file 检测具名管道,如果是,则返回 true。 [ -p $file ] 返回 false。
-u file 检测设置了 SUID 位,如果是,则返回 true。 [ -u $file ] 返回 false。
-r file 检测可读,如果是,则返回 true。 [ -r $file ] 返回 true。
-w file 检测可写,如果是,则返回 true。 [ -w $file ] 返回 true。
-x file 检测可执行,如果是,则返回 true。 [ -x $file ] 返回 true。
-s file 检测空(文件大小是否大于0),不为空返回 true。 [ -s $file ] 返回 true。
-e file 检测存在,如果是,则返回 true。 [ -e $file ] 返回 true。
 

●Shell echo命令
1.显示普通字符串:
echo "It is a test"
echo It is a test

2.显示转义字符
echo "\"It is a test\""
echo \"It is a test\"
结果将是:
"It is a test"

3.显示变量
read 命令从标准输入中读取一行.
read name

4. 转义
echo -e "OK! \n" 
echo -e "OK! \c" # -e 开启转义
echo "It it a test"

5.显示结果定向至文件
echo "It is a test" > myfile

6.原样输出字符串,不进行转义或取变量(用单引号)
echo '$name\"'
echo `date`

●Shell printf 命令
printf format-string [arguments...]
printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234 
%-10s
1、指一个宽度为10个字符(-表示左对齐,没有则表示右对齐)
2、任何字符都会被显示在10个字符宽的字符内,如果不足则自动以空格填充,
3、超过也会将内容全部显示出来。
%-4.2f 指格式化为小数,其中.2指保留2位小数。

printf "%d %s\n" 1 "abc" format-string为双引号
printf '%d %s\n' 1 "abc" format-string为单引号与双引号效果一样 
printf %s abcdef 没有引号也可以输出
printf "%s\n" abc def 格式只指定了一个参数,但多出的参数仍然会按照该格式输出,format-string 被重用
printf "%s and %d \n" 如果没有 arguments,那么 %s 用NULL代替,%d 用 0 代替

●printf的转义序列
\a 警告字符,通常为ASCII的BEL字符
\b 后退
\c 抑制(不显示)输出结果中任何结尾的换行字符(只在%b格式指示符控制下的参数字符串中有效),
而且,任何留在参数里的字符、任何接下来的参数以及任何留在格式字符串中的字符,都被忽略
\f 换页(formfeed)
\n 换行
\r 回车(Carriage return)
\t 水平制表符
\v 垂直制表符
\\ 一个字面上的反斜杠字符
\ddd 表示1到3位数的字符。仅在格式字符串中有效
\0ddd 表示1到3位的八进制值字符

●Shell test命令
Shell中的 test 命令用于检查某个条件是否成立。数值、字符和文件三个方面的测试
数值测试
num1=100
num2=100
if test $[num1] -eq $[num2]
then
echo '两个数相等!'
else
echo '两个数不相等!'
fi

●字符串测试
num1="runoob"
num2="runoob"
if test num1=num2
then
echo '两个字符串相等!'
else
echo '两个字符串不相等!'
fi

●文件测试
cd /bin
if test -e ./bash
then
echo '文件已存在!'
else
echo '文件不存在!'
fi

●Shell 流程控制

●if 循环
if condition1
then
command1
elif condition2 
then 
command2
else
commandN
fi
单行:if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi

●for 循环
for var in item1 item2 ... itemN
do
command1
command2
...
commandN
done
单行:for var in item1 item2 ... itemN; do command1; command2… done;

●while 语句
while循环用于不断执行一系列命令,也用于从输入文件中读取数据;命令通常为测试条件
while condition
do
command
done

●until 循环
until condition
do
command
done

●case模式
case 值 in
模式1)
command1
command2
...
commandN
;;
模式2)
command1
command2
...
commandN
;;
esac

  

posted @ 2019-03-18 14:10  山的那一边  阅读(141)  评论(0)    收藏  举报