工具篇-shell脚本编程快速入门(over)

2020-06-23  本文已影响0人  秃头猿猿

参考:《shell脚本-菜鸟教程》

1 流程控制语句

1.1 if语句

2 运算符

在shell中运算符分为以下几种:

注意:

原生的bash是不支持数学运算的,所以我们需要借助其他的命令帮助我们去执行,最常用的就是expr,这是一款表达式计算工具,可以帮助我们去完成求值操作。例如:

image-20200615161658392

从图中可知 两数相加 运算符中间必须要有空格,否则无法计算

2.1 算数运算符

2.2 关系运算符

2.3 逻辑运算符

对布尔结果进行计算

运算符 说明
! 对布尔结果取反,如果结果为true,取反结果为false
-a 与 左右边结果都为true,整个结果为true
-o 只要一个结果为true,整个结果为true
&& 如果左边结果为false,就不会执行右边,直接整个结果为false
|| 如果左边为true,就不会执行右边,直接整个结果为true

案例

#!/bin/bash
a=13
b=14

# 取反 符号与表达式之间要有空格
if [ ! $a -gt $b ]
then
  echo "对 $a -gt $b 结果取反"
fi

#-a 与运算,即使左边结果为false,也会计算右边
if [ $a -lt 20 -a $a != 100 ]
then
 echo "-a 与运算"
fi

#-o 或运算 即使左边结果为true也会再去计算右边
if [ $a -lt 20 -o $a -gt $b ]
then
echo "-o 与运算"
fi

#&& 逻辑与运算 如果左边结果为false,整个结果为false,不会再去计算右边,只有当左边结果为true时才会计算右边
# 必须用双中括号包裹起来
if [[ $a -lt $b && $b != 100 ]]
then
   echo "逻辑与运算"
fi

#|| 逻辑||运算 如果左边结果为true,整个结果为true,不会再去计算右边,只有当左边结果为false时才会计算右边
# 必须用双中括号包裹起来
if [[ $a -lt $b || $b != 100 ]]
then
   echo "逻辑或运算"
fi

结果如下:

image-20200615212155396

2.4 字符串运算符

对字符串进行逻辑判断。

逻辑表达式 说明
= 用来比较两个字符串,如果字符串相等返回true,否则返回false
!= 用来比较两个字符串,如果不等返回true,相等返回false
-z 用来检测字符串长度是否为0,为0返回ture,不为0返回falses
-n 用来检测字符串长度,如果长度不为0返回true,否则返回false
$ 用来检测字符串是否为空,不为空返回true

案例

#!/bin/bash
a="lisi"
b=""
c="wangwu"

echo "a 字符串内容为:$a"
echo "b 字符串内容为:$b"
echo "c 字符串内容为:$c"

if [ $c = $a ]
then
  echo "a 与 c比较  不等" 
else
  echo "a 与 c比较 相等"
fi


if [ $a != $c ]
then
  echo "a 与 c比较  不等" 
else
  echo "a 与 c比较 相等"
fi

if [ -z $b ]
then
  echo "b 的字符串长度为0"
else
  echo "b 的字符串长度不为0"
fi


#要用 双引号包裹起来
if [-n "$c" ]
then
  echo "c 的字符串长度不为0"
else
  echo "c 的字符串长度为0"
fi

if [ $b ]
then
  echo "b字符串内容为空"
else
  echo "b的字符串不为空"
fi

结果如下:

image-20200623093536521

2.5 文件操作符

在linux中,一切皆文件,因此我们可以对进行进行一些逻辑操作

符号 说明
-b 检测是否为块设备(u盘,硬盘)文件,如果是 返回true,否则返回fals(这个不怎么常用,了解即可)
-c 用来检测是否为字符设备(键盘,打印机)文件,如果是返回true,否则返回false(不怎么常用,了解即可)
-d 用来检测文件是否为目录,如果是返回true,否则返回false
-f 用来检测文件是否为普通文件,如果是返回true,否则返回false
-r 用来检测文件是否可读,可读返回true,否则返回false
-w 用来检测文件是否可写,可读返回true,否则返回false
-x 用来检测文件是否可执行,可执行返回true,否则返回false
-s 用来检测文件是否为空,主要是是看文件大小是否为0,是返回true,不是返回false
-e 用来检测文件(目录)是否存在,如果存在返回true,不存在返回false

案例:

#!/bin/bash
path="./test1.sh"
echo "文件地址: $path"

if [ -b $path ] 
then
  echo "当前文件是块设备文件"
else
 echo "当前文件不是块设备文件"
fi

if [ -c $path ] 
then
  echo "当前文件是块字符设备文件"
else
 echo "当前文件不是字符设备文件"
fi

if [ -d $path ] 
then
  echo "当前文件是目录文件"
else
 echo "当前文件不是目录文件"
fi

if [ -f $path ] 
then
  echo "当前文件是普通文件"
else
 echo "当前文件不是普通文件"
fi

if [ -r $path ] 
then
  echo "当前文件是可读文件"
else
 echo "当前文件不是可读文件"
fi

if [ -w $path ] 
then
  echo "当前文件可写"
else
 echo "当前文件不可写"
fi

if [ -x $path ] 
then
  echo "当前文件是可执行文件"
else
 echo "当前文件不是可执行文件"
fi

if [ -s $path ] 
then
  echo "当前文件是不为空"
else
 echo "当前文件为空"
fi

if [ -b $path ] 
then
  echo "当前文件存在"
else
 echo "当前文件不存在"
fi

结果如下:

image-20200623101940456

3 循环

3.1 for循环

3.2 while循环

3.3 死循环

for((;;))
或者
while true
do
    code
    code
    ...
done

3.4 跳出循环

上一篇下一篇

猜你喜欢

热点阅读