shell学习数组、基本运算符

数组

语法

数组名=(值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=32
b=34

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

输出:a不等于b


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

“-ne”

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

a=32
b=34

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

输出:a不等于b

“-gt”

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

a=32
b=32

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

输出:a小于等于b

“-lt”

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

a=32
b=32

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

输出:a大于等于b

“-ge”

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

a=33
b=32

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

输出:a大于等于b

“-le”

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

a=33
b=32

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

输出:a大于b

布尔值运算符

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

输出:a不等于b

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

输出:成立


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

  1. “-a”:与运算,两个表达式为true,则返回true
    a and的缩写
a=100
b=200
if [ $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 $filename
done

输出文件下的列表文件

4.嵌套循环

for ((a=1;a<5;a++))
do

 echo  a = $a
 for (( i = 0; i < 10; i++ )); 
 do
   echo i = $i
 done

done

“while”循环

1.普通

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

2.无限循环

while :
do
            echo "1"    #statements
done    

或者

while true
do
            echo "1"    #statements
done    

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;
    fi
done

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
    done

done

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
    done

done
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值