目录
Shell运算符
-
算术运算符
-
#! /bin/bash a=20 b=10 val=`expr $a + $b`#不是单引号 是esc下面的符号(英文输入法) echo "a + b : $val" val=`expr $a - $b` echo "a - b : $val" val=`expr $a \* $b` echo "a * b : $val" val=`expr $a / $b` echo "a / b : $val" val=`expr $a % $b` echo "a + b : $val" if [ $a == $b ] then echo "a 等于 b" else echo "a 不等于 b" fi if [ $a != $b ] then echo "a 不等于 b" else echo "a 等于 b" fi
- expr是一款表达式计算工具,使用它能完成表达式的求值操作
-
- 关系运算符
-
- 关系运算符只支持数字,不支持字符串,除非字符串的值是数字
-
#! /bin/bash a=10 #不能敲成 a = 10 这样a会被识别为一个命令 b=20 if [ $a -eq $b ] #不能敲成[$a -eq $b],需要空格,不然有语法错误 then echo "$a -eq $b a 等于 b" else echo "$a -eq $b a 不等于 b" fi if [ $a -ne $b ] then echo "$a -ne $b a 不等于 b" else echo "$a -ne $b a 等于 b" fi if [ $a -gt $b ] then echo "$a -gt $b a 大于 b" else echo "$a -gt $b a 小于 b" fi if [ $a -lt $b ] then echo "$a -lt $b a 小于 b" else echo "$a -lt $b a 大于 b" fi if [ $a -ge $b ] then echo "$a -ge $b a 大于或等于 b" else echo "$a -ge $b a 小于 b" fi if [ $a -le $b ] then echo "$a -le $b a 小于或等于 b" else echo "$a -le $b a 大于 b" fi
-
布尔运算符
-
#! /bin/bash a=10 b=20 if [ $a != $b ] then echo "$a != $b: a 不等于 b" else echo "$a == $b: a 等于 b" fi if [ $a -lt 100 -a $b -gt 15 ] then echo "$a 小于 100 且 $b 大于 15 :返回 true" else echo "$a 小于 100 且 $b 大于 15 :返回 false" fi if [ $a -lt 100 -o $b -gt 100 ] then echo "$a 小于 100 或 $b 大于 100:返回 true" else echo "$a 小于 100 或 $b 大于 100:返回 false" fi if [ $a -lt 5 -o $b -gt 100 ] then echo "$a 小于 5 或 $b 大于 100 :返回 true" else echo "$a 小于 5 或 $b 大于 100:返回 false" fi
-
-
逻辑运算符
-
#! /bin/bash a=10 b=20 if [[ $a -lt 100 && $b -gt 100 ]] then echo "返回 true" else echo "返回 false" fi if [[ $a -lt 100 || $b -gt 100 ]] then echo "返回 true" else echo "返回 false" fi
-
-
字符串运算符
-
#! /bin/bash a="abc" b="efg" if [ $a = $b ] then echo "$a = $b : a 等于 b" else echo "$a = $b : a 不等于 b" fi if [ $a != $b ] then echo "$a != $b : a 不等于 b" else echo "$a != $b : a 等于 b" fi if [ -z $a ] then echo "-z $a : 字符串长度为0" else echo "-z $a : 字符串的长度不为0" fi if [ -n $a ] then echo "-n $a : 字符串长度不为0" else echo "-n $a : 字符串长度为0" fi if [ $a ] then echo "$a : 字符串不为空" else echo "$a : 字符串为空" fi
-
-
文件测试运算符
-
#! /bin/bash file="/root/test.sh" if [ -r $file ] then echo "文件可读" else echo "文件不可读" fi if [ -w $file ] then echo "文件可写" else echo "文件不可写" fi if [ -x $file ] then echo "文件可执行" else echo "文件不可执行" fi if [ -f $file ] then echo "文件为普通文件" else echo "文件为特殊文件" fi if [ -d $file ] then echo "文件是个目录" else echo "文件不是个目录" fi if [ -s $file ] then echo "文件不为空" else echo "文件为空" fi if [ -e $file ] then echo "文件存在" else echo "文件不存在" fi
-
echo打印数据
- Shell的echo指令与PHP的echo指令类似,都用于字符串的输出
-
#! /bin/bash ## 显示普通字符串 echo "Hello world" ## 显示转义字符 echo "\"Hello world\"" ## 显示变量 name="xyx" echo "$name Hello world" ## 显示换行 echo -e "OK! \n" echo "Hello world" ## 显示不换行 echo -e "OK! \c" echo "Hello world" ## 显示结果定向至文件 echo "Hello world" > myfile ## 原样输出字符串 echo '$name\"' ## 显示命令执行结果 echo `date`
test命令
- Shell中的test命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试
-
数字
-
参数 说明 -eq 等于则为真 -ne 不等于则为真 -gt 大于则为真 -ge 大于等于则为真 -lt 小于则为真 -le 小于等于则为真
-
-
字符串
-
参数 说明 = 等于则为真 != 不相等则为真 -z 字符串 字符串的长度为0则为真 -n 字符串 字符串的长度不为0就为真
-
-
文件测试
-
参数 说明 -e 文件名 如果文件存在则为真 -r 文件名 如果文件存在且可读则为真 -w 文件名 如果文件存在且可写则为真 -x 文件名 如果文件存在且可执行则为真 -s 文件名 如果文件存在且至少有一个字符为真 -f 文件名 如果文件存在且为普通文件则为真 -c 文件名 如果文件存在且为字符型特殊文件则为真 -b 文件名 如果文件存在且为块特殊文件则为真 -d 文件名 如果文件存在且为目录则为真
-
-
#! /bin/bash #比较 num1=100 num2=100 if test $[num1] -eq $[num2] then echo "两个数相等!" else echo "两个数不相等!" fi
Shell流程控制
-
if
-
if condition1 then command1 elif condition2 then command2 else commandN fi
-
-
case
- Shell case语句为多选择语句,可以用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令
-
case 值 in 模式1) command1 command2 ... commandn ;; 模式2) command1 command2 ... commandn ;; esac
-
#! /bin/bash echo "输入1到4的数字:" echo "你输入的数字为:" read num case $num in 1) echo "你选择了1" ;; 2) echo "你选择了2" ;; 3) echo "你选择了3" ;; 4) echo "你选择了4" ;; *) echo "你没有输入1到4之间的数字 ;; esac
-
for
- 当变量值在列表里,for循环即执行一次所有命令,使用列表名获取列表中的当前取值
- 命令可为任何有效的shell命令和语句。in列表可以包含替换、字符串和文件名
- in列表是可读的,如果不用它,for循环使用命令行的参数
-
for var in item1 item2 ... itemN do command1 command2 ... commandN done
-
#! /bin/bash for loop in 1 2 3 4 5 do echo "The value is: $loop" done for str in "This is a string" do echo $str done
-
while
- while循环用于不断执行一系列命令,也用于从输入文件 中读取数据;命令通常为测试条件
-
while condition do command done #无限循环 while true do command done
-
#Bash let 命令,它用于执行一个或者多个表达式,变量计算中不需要加上$来表示变量 #! /bin/bash i=1 while(($i<=5)) do echo $i let "i++" done
-
break
- break命令允许跳出所有循环(终止执行后面的循环)
-
#! /bin/bash while : do echo -n "输入1到5之间的数字" read aNum case $aNum in 1|2|3|4|5) echo "你输入的数字为 $aNum!" ;; *) echo "你输入的数字不是1到5之间的!游戏结束" break ;; esac done
-
continue
- contiue命令不会跳出所有循环,仅仅跳出当前循环
-
#! /bin/bash while : do echo -n "输入1到5之间的数字" read aNum case $aNum in 1|2|3|4|5) echo "你输入的数字为 $aNum!" ;; *) echo "你输入的数字不是1到5之间的!" continue echo "游戏结束" ;; esac done
Shell函数
- Linux shell 可以用户定义的函数,然后在shell脚本中可以随便调用
- 可以带function fun()定义,也可以直接fun()定义,不带任何参数
- 参数返回,可以显示加;return 返回,如果不加,将以最后一条命令运行结果,作为返回值,return后跟数值n(0-255)
-
#! /bin/bash ## 第一个函数---------------------------------------- demoFun(){ echo "这是我的第一个shell函数!" } echo "------------函数开始执行------------" demoFun echo "------------函数执行完毕------------" ## 函数返回值--------------------------------------- funWithReturn(){ echo "这个函数会对输入的两个数字进行相加运算..." echo "输入第一个数字:" read num1 echo "输入第二个数字" read num2 echo "两个数字分别为$num1和$num2!" return $(($num1+$num2)) } funWithReturn #函数返回值在调用该函数后通过 $? 来获得 echo "输入的两个数字之和为 $? !" ## 函数参数----------------------------------------- funWithParam(){ echo "第一个参数为$1" echo "第二个参数为$2" echo "第三个参数为$3" echo "第十个参数为$10" echo "第十个参数为${10}" echo "第十一个参数为${11}" echo "参数总共有$#个" echo "作为一个字符串输出所有参数 $* " } funWithParam 1 2 3 4 5 6 7 8 9 10 11 12 13 14