Shell高级进阶

一、Shell运算符

1.1、运算符的分类   

  • 算数运算符

  • 关系运算符

  • 布尔运算符

  • 字符串运算符

  • 文件测试运算符

1.2、算数运算符

expr 是一款表达式计算工具,使用它能完成表达式的求值操作。
#!/bin/bash
a = 10
b = 20
val = `expr $a + $b ` 注:这里=号两边都不要空格,还有就是+左右都要空格,下面都是一样的规则
echo "a + b : $val "
val = `expr $a - $b `  注: 这里用的 ` 是在Esc下面那个符号
echo "a - b : $val "
val = `expr $a \* $b `
echo "a * b : $val "
val = `expr $b / $a `
echo "b / a : $val "
val = `expr $b % $a `
echo "b % a : $val "
if [ $a == $b ]    注: if跟 [ 之间是要空格的, [ 跟$a之间也是要空格的, 后面$b跟 ] 也是要空格的
then
        echo "a 等于 b"
fi
if [ $a ! = $b ]
then
        echo "a 不等于 b"
fi

1.3、关系运算符

关系运算符只支持数字,不支持字符串,除非字符串的值是数字。
#!/bin/bash
a = 10
b = 20
if [ $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

1.4、布尔运算符

#!/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

1.5、逻辑运算符

#!/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

1.6、字符串运算符

#!/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" 3.1.6. 文件测试运算符
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

1.7、文件测试运算符

#!/bin/bash
file = "/var/node/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指令用于字符串的输出

## 显示普通字符串
echo "Hello World"
## 显示转义字符
echo "\"Hello World\""
## 显示变量
name = "zhangsan"
echo " $name Hello World"
## 显示换行
echo -e "OK! \n"                   注: 如果想要时用换行的功能, 则需要在echo加一个-e
echo "Hello World"
## 显示不换行
echo -e "OK! \c"
echo "Hello World"
## 显示结果定向至文件
echo "Hello World" > myfile
## 原样输出字符串
echo '$name\"'
## 显示命令执行结果
echo `date`

三、test命令

Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。
  • 数字

  • 字符串 

  • 文件测试

# 比较
num1 = 100
num2 = 100
if test $[num1 ] -eq $[num2 ]
then
        echo ' 两个数相等! '
else
        echo ' 两个数不相等! '
fi

四、Shell流程控制(可以联想java语法)

4.1、if

格式: 

if condition1
then
command1
elif condition2
then
command2
else
commandN
fi

举例:  

a = 10
b = 20
if [ $a == $b ]
then
        echo "a 等于 b"
elif [ $a -gt $b ]
then
        echo "a 大于 b"
elif [ $a -lt $b ]
then
        echo "a 小于 b"
else
        echo " 没有符合的条件 "
fi

4.2、case

Shell case 语句为多选择语句。可以用 case 语句匹配一个值与一个模式,如果匹配成功,执行相匹
配的命令。
格式: 
case in
模式 1)
command1
command2
...
commandN
;;
模式 2
command1
command2
...
commandN
;;
esac

举例: 

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

4.3、for

  • 当变量值在列表里,for循环即执行一次所有命令,使用变量名获取列表中的当前取值。
  • 命令可为任何有效的shell命令和语句。in列表可以包含替换、字符串和文件名。
  • in列表是可选的,如果不用它,for循环使用命令行的位置参数。

格式:

for var in item1 item2 ... itemN
do
command1
command2
...
commandN
done

举例:

for loop in 1 2 3 4 5
do
        echo "The value is: $loop "
done
for str in 'This is a string' , 'hello moto'
do
        echo $str
done

4.4、while循环 

while循环用于不断执行一系列命令, 也用于从输出文件中读取数据; 命令通常为测试条件

while condition
do
        command
done
# Bash let 命令,它用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量
#!/bin/bash
int = 1
while (( $int < = 5 ))   注意: 这里如果要使用<=, >=运算符要使用(( ))来写
do
        echo $int
let "int++"
done
# 无限循环
while true
do
        command
done

4.5、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

4.7、continue

continue命令不会跳出所有循环, 仅仅跳出当前循环

#!/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 aNum
        echo " 输入第二个数字 : "
        read anotherNum
        echo " 两个数字分别为 $aNum $anotherNum !"
        return $(( $aNum + $anotherNum ))
}
funWithReturn
# 函数返回值在调用该函数后通过 $? 来获得。
echo " 输入的两个数字之和为 $? !"
## 函数参数 ------------------------------
funWithParam(){
        echo " 第一个参数为 $1 !"
        echo " 第二个参数为 $2 !"
        echo " 第十个参数为 $1 0 !"
        echo " 第十个参数为 ${10} !"
}
funWithParam 1 2 3 4 5 6 7 8 9

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值