shell学习数组、基本运算符

来源:互联网 发布:vb中要求对象 编辑:程序博客网 时间:2024/05/17 00:51

数组

语法

数组名=(值1 值2 值3…)

初始化数组

有两种方法
1. 方式一

name=("李明" "Andy" "李磊" "james")echo $name

打印第一个元素
2. 方式二

name=()name[0]="404"name[1]="Andy"name[2]="柚芒子"name[3]="全班最菜"echo ${name[0]}  ${name[1]}

读取数组

语法结构:${数组名[下标]}

name=("404" "Andy" "柚芒子" "全班最菜")#输出一个元素     echo ${name[0]}#输出所有->"@"表示输出所有的数据echo ${name[@]}#输出所有->"*"表示输出所有的数据echo ${name[*]}

数组里面的长度

1.数组长度

语法:${#数组名[@]}
或者: ${#数组名[*]}

    name=("404" "Andy" "柚芒子" "全班最菜")    echo ${#name[@]}    echo ${#name[*]}

结果 4

2.数组元素长度

语法:${#数组名[下标]}

    name=("404" "Andy" "柚芒子" "全班最菜")                echo ${#name[2]}

结果 3

传递参数

语法定义
./文件名称.sh 参数1 参数2 参数3…

##${0}->表示文件名称###${1}->表示参数1###${2}->表示参数2    echo ${0} ${1}  ${2}# 执行脚本代码:./hello.sh "合理" "哈哈"

结果 ./hello.sh 合理 哈哈


$#:获得脚本输入参数个数

# 脚本内容如下:    echo ${#}  # 执行脚本代码: ./hello.sh "逗你玩" "饿到爆"

结果 2


${*} 显示整个脚本输入参数列表

# 脚本内容如下:    echo ${*}  # 执行脚本代码:    # ./hello.sh "逗你玩" "饿到爆"

结果: 逗你玩 饿到爆

基本运算符

算数运算符

注意:”expr”规定命令

加法

    a=8388    b=9688    c=`expr $a + $b`     echo "c的值:$c"

结果:c的值:18076


注意 “是键盘左上角 $a + $b之间要有空格

减法

    a=8388    b=9688    c=`expr $a - $b`     echo "c的值:$c"

结果:c的值:-1300

乘法

    a=8388    b=9688    c=`expr $a \* $b`     echo "c的值:$c"

结果:c的值:81262944


注意 *要转义一下写成 \*

除法

    a=8388    b=9688    c=`expr $b / $a`     echo "c的值:$c"

结果:c的值:1


注意 结果是向下取整

求余

    a=8388    b=9688    c=`expr $b % $a`     echo "c的值:$c"

结果:c的值:1300

关系运算符

“-eq”

“-eq”:检测两个数是否相等,当等返回true
eq 就是equal的缩写

a=32b=34if [ $a -eq $b ]then    echo "a等于b"else       echo "a不等于b"fi

输出:a不等于b


注意:[ $a -eq $b ] 括号和代码直接有空格

“-ne”

“-ne”:检测两个数是否不相等,不相等返回true
ne 就是not equal的缩写

a=32b=34if [ $a -ne $b ]then    echo "a不等于b"else       echo "a等于b"fi

输出:a不等于b

“-gt”

“-gt”:检测左边数是否大于右边数,如果是,返回true
gt 就是greater than的缩写

a=32b=32if [ $a -gt $b ]then    echo "a大于b"else       echo "a小于等于b"fi

输出:a小于等于b

“-lt”

“-lt”:检测左边数是否小于右边数,如果是,返回true
lt 就是less than的缩写

a=32b=32if [ $a -lt $b ]then    echo "a小于b"else       echo "a大于等于b"fi

输出:a大于等于b

“-ge”

“-ge”:检测左边数是否(大于+等于)右边数,如果是,返回true
ge 就是greater or equal的缩写

a=33b=32if [ $a -ge $b ]then    echo " a大于等于b"else       echo "a小于b"fi

输出:a大于等于b

“-le”

“-ne”:检测左边数是否(小于+等于)右边数,如果是,返回true
le 就是less or equal的缩写

a=33b=32if [ $a -le $b ]then    echo " a小于等于b"else       echo "a大于b"fi

输出:a大于b

布尔值运算符

  1. “!”:非运算,表达式为true,返回true,否则返回false
a=100b=200if [ $a != $b ]thenecho "a不等于b"fi

输出:a不等于b

  1. “-o”:或运算,有一个表达式为true,则返回true
    o or的缩写
a=100b=200if [  $a -lt 200  -o  $b -gt 200  ]then    echo "成立"fi

输出:成立


注意:中括号的个数和运算符直接的空格

  1. “-a”:与运算,两个表达式为true,则返回true
    a and的缩写
a=100b=200if [ $a -lt 200 -a $b -gt 200 ]then    echo "成立"else    echo "不成立"fi

输出:不成立


注意:中括号的个数和运算符直接的空格

逻辑运算符

  1. “&&”:逻辑且->and
   a=100    b=200    if [ $a -lt 200 ] && [ $b -gt 200 ]    then        echo "成立"    else        echo "不成立"    fi  

输出:不成立


注意:中括号的个数和运算符直接的空格

  1. “||”:逻辑 OR
a=100    b=200    if [ $a -lt 200 ] || [ $b -gt 200 ]    then        echo "成立"    else        echo "不成立"    fi  

输出:成立


注意:中括号的个数和运算符直接的空格

字符运算符

“=”

检测两个字符串(也可以数字)是否相等,如果相等返回true

a="JAR"b="逗你玩"if [ $a = $b ]then    echo "字符串a等于字符串b"else    echo "字符串a不等于字符串b"fi

输出:字符串a不等于字符串b

“!=”

检测两个字符串是否相等,如果不相等返回true

a="JAR"b="逗你玩"if [ $a != $b ]then    echo "字符串a不等于字符串b"else    echo "字符串a等于字符串b"fi

输出:字符串a不等于字符串b

“-z”

检测字符串长度是否为0,如果是返回true
z 是zero的缩写

a="JAR"if [ -z $a ]then    echo "a为空"else    echo "a不为空"fi

输出:a不为空

“-n”

检测字符串长度是否为0,如果不是0 返回true

a="JAR"if [ -n "$a" ]then    echo "a不为空"else    echo "a为空"fi

输出:a不为空

“”

检测字符串是否为空,不为空返回true

a="JAR"if [ -n  ]then    echo "a不为空"else    echo "a为空"fi

输出:a不为空

文件测试运算符

“-d file”

检测文件是不是一个目录,如果是,那么返回true
d是directory的缩写

file="/Users/liyanjun/shell/hello.sh"if [ -d $file ] then    echo "是一个目录"else        echo "不是一个目录"fi

输出:不是一个目录

“-r file”

检测文件是否可读,如果是,那么返回true

file="/Users/liyanjun/shell/hello.sh"if [ -r $file ] then    echo "可读"else        echo "不可读"fi

输出:可读

“-w file”

检测文件是否可写,如果是,那么返回true

file="/Users/liyanjun/shell/hello.sh"if [ -d $file ] then    echo "可写"else        echo "不可写"fi

输出:不是一个目录

“-x file”

检测文件是否是可执行文件,如果是,那么返回true

file="/Users/liyanjun/shell/hello.sh"if [ -x file ] then    echo "可执行"else        echo "不可执行"fi

输出:可执行

“-x file”

检测文件是否是可执行文件,如果是,那么返回true

file="/Users/liyanjun/shell/hello.sh"if [ -x file ] then    echo "可执行"else        echo "不可执行"fi

输出:可执行

“-f file”

检测文件是否是一个普通文件(既不是目录,也不是设备文件),如果是,那么返回true
f

file="/Users/liyanjun/shell/hello.sh"if [ -f file ] then    echo "普通文件"else        echo "不是普通文件"fi

输出:普通文件

“-e file”

检测文件是否存在(包含了:目录和文件),如果是,那么返回true
e exist的缩写

file="/Users/liyanjun/shell/hello.sh"if [ -e file ] then    echo "存在"else        echo "不存在"fi

输出:存在

流程控制

if

代码结构            a="JAR"            b="逗你玩"            if [ $a = $b ]            then                echo "字符串a等于字符串b"            fi

“if else”语句

a="JAR"            b="逗你玩"            if [ $a = $b ]            then                echo "字符串a等于字符串b"            else                echo "字符串a不等于字符串b"            fi

if-else-if-else”

a="JAR"            b="逗你玩"            if [ $a = $b ]            then                echo "字符串a等于字符串b"            elif [ $a ]            then                echo "字符串a不为空"            else                echo "字符串a不等于字符串b"            fi

“for”循环语句

1.

for name in "JAR" "小白菜" "Andy" "雪夜"            do                echo ${name}            done

2.

names=("JAR" "小白菜" "Andy" "雪夜");for name in ${names[*]};            do                echo ${name} 是一个;            done

3.读取文件列表

file="/Users/liyanjun/Desktop/*"for filename in $file do    echo $filenamedone

输出文件下的列表文件

4.嵌套循环

for ((a=1;a<5;a++))do echo  a = $a for (( i = 0; i < 10; i++ ));  do   echo i = $i donedone

“while”循环

1.普通

    while(($a<10))            do                echo ${a}                a=`expr $a + 1`            done

2.无限循环

while :do            echo "1"    #statementsdone    

或者

while truedo            echo "1"    #statementsdone    

case语句

语法结构

语法结构
case 值 in
模式1)
代码
;;
模式2)
代码
;;
模式3)
代码
;;
sac

案例

umber=1            case $number in            1) echo "等于1"                ;;            2) echo "等于2"                ;;            3) echo "等于3"                ;;            esac

for循环 跳出单个循环

for (( i = 0; i < 10; i++ )); do    if [ $i == 5 ]     then        echo "退出循环"        break;    fidone

for循环 跳出内部循环

for (( i = 0; i < 5; i++ )); do     echo "外层循环的值是 ${i} "    for (( j = 0; j < 5; j++ )); do         echo "内层循环的值是 ${j}"         if [ ${j} == 2 ]            then            echo "退出内部循环"            break;         fi    donedone

for循环 跳出外部部循环

# for循环 跳出外部部循环for (( i = 0; i < 5; i++ )); do     echo "外层循环的值是 ${i} "    for (( j = 0; j < 5; j++ )); do         echo "内层循环的值是 ${j}"         if [ ${j} == 2 ]            then            echo "退出内部循环"            break 2 #退出的层数 2表示退出2层         fi    donedone
原创粉丝点击