一、判断test、[]、[[]]和(())

 shell中的判断几乎都由此完成,test与[]完全等价。[[]]功能等于[]和expr的相加:逻辑运算&& ||,可以使用()括号和正则表达式。

①数字比较数

int1 -eq int2。 -eq、-ne、-gt、-ge、-lt、-le。意即greater than, lesser than or equal,数字不能用< > ==比较 会被当成字符串做字典序比较!

 

test定义方法 [test]_正则表达式

②字符串判断

 [ string ]是否非空,[ str1 == str2],!=、>、<。  这里str2可以使用通配符

③逻辑运算符

 &&、||、!、(),括号用于改变优先级

 

test定义方法 [test]_正则表达式_02

④文件检测

 [ -e file ]  文件是否存在

 [ -f file ]  是否为普通文件

 [ -d file ]  是否为目录

 [ -r file ]  是否存在且当前用户可读

正则表达式匹配 str1 =~ str2, str2是pattern

  

test定义方法 [test]_Mac_03

 注意事项:

  [[ shine != 20024 ]], 这里一共出现4个空格,[[语句本身2个 !=操作符左右也必须有(这跟expr一样)

  echo $?, $?是上一句执行后的回传码,回传0表示标准输出|正确执行,否则是标准错误|错误执行。

2、更好用的(()),[[]]主要用于数字和字符串的比较,(())不用于字符串的比较

  ①可以运算,且是变量的多个表达式的运算eg:((a=2,b=2+ 1, var=6));

  ②c的数字逻辑运算 var=$((a*=++b *a)) ,没有那四个空格的限制

  ③同样可以用于判断(包括bc判断)

  ④和$[]一样可以直接使用变量,不用加$

 

test定义方法 [test]_字符串_04

二、流程控制

①if的判断: 看返回码是否为0,为0则正确执行

if [[ shine != 20034 && !($var -ne 12) ]];
then
        echo that is good;

 else if [[ $var > 20 ]] || [[ shine =~ [a-z]{3,} ]];
 then
     echo it is great;
 else
     echo default;
fi

②case语句

  以下例case.sh和select.sh

 

test定义方法 [test]_test定义方法_05

 

test定义方法 [test]_字符串_06

 注意说明

 (apple)和 apple)都能行,左括号不必要。

  对$1变量进行通配符匹配,不是正则表达式匹配哦

  三种退出当前分支:  ;&表无需匹配地执行下一分句,;;&需匹配地执行所有分句,;;执行完当前分局后表跳出case

③条件结构select 

  如上右图,因为没有break命令跳出select 将一直选择执行下去。select常与case搭配使用

#!/bin/bash

select ch in "Linux" "Windows" "Mac OS"
do
        case $ch in
        "Linux1")
                echo "Linux是一个类UNIX操作系统,开源免费"
                break
                ;;  # ;;是不可省略的
        "Windows")
                echo "Windows是微软开发的个人电脑操作系统,闭源收费"
                break
                ;;
        "Mac OS")
                echo "Mac OS是苹果公司开发的一款图形界面操作系统"
                break
                ;;
        *)
                echo "没有这个选项!"
                break
        esac
done
echo i have select $ch

④for循环两种使用

 一是for in ,二是((C语言方式))

 

test定义方法 [test]_Mac_07

#!/bin/bash

for ((i=1,j=100; i<=3 && j>=3; ++i,--j));
do
     printf "%-5d%-5d\n" $i $j
done

let i=1,sum=0
while [ $i -le 10 ];
do
    let sum+=i;
    let ++i;
done
echo $sum

 

 2021-12-09 17:04:23