三.shell脚本语言

2019-12-21  本文已影响0人  木子心语

命令状态

命令状态.png

shell脚本语言-echo命令?

echo "iPhoneX 标配 8388"
echo "iPhoneX 顶配 9688"
iphone="iPhoneX"
echo "${iphone}9688"
错误写法
echo "iPhoneX\nhello 未来"
正确写法(-e:表示开启转义功能)
echo -e "iPhoneX\nhello未来"

*不换行

#换行
#echo "iPhoneX hello未来"
#echo "科技"
#不换行
#echo -e "iPhoneX hello未来 \c"
#echo "科技"
#要求:输出当前时间
#echo `date`
#语法:exit状态
#写法一
#iphone="404报错,买了一台iPhoneX,非常不好,出bug"
#echo ${iphone}
#exit
#echo "哈哈"
#写法二
#iphone="404找不到错误"
#echo ${iphone}
#exit 0

Shell脚本语言-数组?

1.语法
数组名=(值1 值2 值3 ...)
2.初始化数组
#方式一
#name=("404" "hello" "hi" "lk")
#输出
#echo $name

方式二
#name=()
#name[0]="404"
#name[1]="hello"
#name[2]="hi"
#name[4]="lk"
#echo ${name[0]} ${name[1]}
3.读取数组
#语法结构:${数组名[下标]}
#name=("404" "hello" "hi" "lk")
#输出一个元素
#echo ${name[0]}
#输出所有->"@"和"*"表示输出所有的数据
#总结:"@"和"*"区别
#"@"->输出结果:"404" "hello" "hi" "lk"
#"*"->输出结果:"404 hello hi lk"
#echo ${name[*]}
#echo ${name[@]}
4.数组长度
#方式一:获取数组元素个数
#@语法:${#数组名[@]}
#代码:
#name=("404" "hello" "hi" "lk")
#echo ${#name[@]}
#结果:4
#方式二:获取数组元素个数
#语法:${#数组名[*]}
#代码:
#name=("404" "hello" "hi" "lk")
#echo ${#name[*]}
#结果: 4
#方式三:获取单个元素->字符长度
#语法:${#数组名[下标]}
#代码:
#name=("404" "hello" "hi" "lk")
#echo ${#name[2]}
#结果:2

Shell脚本语言-传递参数?

1.语法定义?
./文件名称.sh 参数1 参数2 参数3...
2.案例
#脚本内容如下:
#${0}->表示文件名称
#${1}->表示参数1
#${2}->表示参数2
#echo ${0} ${1} ${2}
#执行脚本代码
#./hello.sh "hello" "hi"
3.特殊字符
#3.1 $#:获得脚本输入参数个数
#脚本内容如下:
#echo ${#}
#执行脚本代码:
#./hello.sh "hello""hi"
#执行脚本结果: 2

3.2 "$*"和"$@":显示整个脚本输入参数列表
#脚本内容如下:
#echo ${*}
#./hello.sh "hello" "hi" "你好"
#执行脚本结果: "hello hi 你好"

Shell脚本语言-基本运算符?

1.1 "+"运算
#注意:"expr"规定命令
#a=8388
#b=9688
#c=`expr $a + $b`
#echo "c的值: $c"
#结果->c的值: 18076
1.2 "-"运算
#注意: "expr"规定命令
#a=8388
#b=9688
#c=`expr $a - $b`
#echo "c的值: $c"
1.3 "*"运算
#注意: "expr"规定命令
#注意: 乘法运算记得加一个"\*"转义字符
#a=8388
#b=9688
#c=`expr $a \* $b`
#echo "c的值: $c"
1.4 "/"运算
#注意: "expr"规定命令
#a=8388
#b=9688
#c=`expr $a / $b`
#echo "c的值:$c"
1.5 "%"运算
#注意: "expr"规定命令
#a=9688
#b=8388
#c=`expr $a % $b`
#echo "c的值: $c"
1.6 "="运算
#注意: "expr"规定命令
#a=8388
#b=$a
#echo "b的值: $b"
1.7 "=="运算
#注意: "expr"规定命令
#a=8388
#b=9688
#if [ $a == $b ]
#then
#echo "a等于b"
#else
#echo "a不等于b"
#fi
关系运算符.png
2.1 "-eq":检测两个数是否相等,相等返回true
#a=100
#b=200
#if [ $a -eq $b ]
#then
#echo "a等于b"
#else
#echo "a不等于b"
#fi
2.2 "-ne":检测两个数是否相等,不相等返回true
#a=100
#b=200
#if [ $a -ne $b ]
#then
#echo "a不等于b"
#else
#echo "a等于b"
#fi
2.3 "-gt":检测左边数是否大于右边数,如果是,返回ture
#a=100
#b=200
#if [ $a -gt $b ]
#then
#echo "a大于b"
#else
#echo "a小于b"
#fi
2.4 "-lt":检测左边数是否大于右边数,如果是,返回true
#a=100
#b=200
#if [ $a -lt $b ]
#then
#echo "a小于b"
#else
#echo "a大于b"
#fi
2.5 "-ge":检测左边数是否(大于+等于)右边数,如果是,返回true
#a=200
#b=200
#if [ $a -ge $b ]
#then
#echo "a大于等于b"
#else
#echo "a小于b"
#fi
2.6 "-le":检测左边数是否(小于+等于)右边数,如果是,返回true
#a=100
#b=200
#if [ $a -le $b ]
#then
#echo "a小于等于b"
#else
#echo "a大于b"
#fi
布尔运算符.png
3.1 "!":非运算,表达式为true,返回true,否则返回false
#a=100
#b=200
#if [ $a != $b ]
#then
#echo "a不等于b"
#fi
3.2 "-o":或运算,有一个表达式为true,则返回true
#a=100
#b=200
#if [ $a -lt 200 -o $b -gt 200 ]
#then
#echo "成立"
#fi
3.3 "-a":与运算,两个表达式为true,则返回true
#a=100
#b=200
#if [ $a -lt 200 -a $b -gt 200 ]
#then
#echo "成立"
#else
#echo "不成立"
#fi
逻辑运算符.png
4.1 "&&":逻辑且->and
#a=100
#b=200
#if [ $a -lt 200 ] && [ $b -gt 200 ]
#then
#echo "成立"
#else
#echo "不成立"
#fi
4.2 "||":逻辑 OR
#a=100
#b=200
#if [ $a -lt 200 ] || [ $b -gt 200 ]
#then
#echo "成立"
#else
#echo "不成立"
#fi
字符串运算符.png
5.1 "=":检测两个字符串是否相等,如果相等返回true
#a="JAR"
#b="JAR"
#if [ $a = $b ]
#then
#echo "字符串a等于字符串b"
#else
#echo "字符串a不等于字符串b"
#fi
5.2 "!=": 检测两个字符串是否相等,如果不相等返回true
#a="JAR"
#b="JAR1"
#if [ $a != $b ]
#then
#echo "字符串a不等于字符串b"
#else
#echo "字符串a等于字符串b"
#fi
5.3 "-z":检测字符串长度是否为0,如果是返回true
#a="JAR"
#if [ -z $a ]
#then
#echo "a为空,不存在"
#else
#echo "a存在值"
#fi
5.4 "-n":检测字符串长度是否为0,如果不是0,返回true
            a="JAR"
            if [ -n $a ]
            then
                echo "a存在"
            else
                echo "a不存在值"
            fi
5.5 "字符串": 检测字符串是否为空,不为空返回true
#a=""
#if [ $a ]
#then
#echo "a不为空"
#else
#echo "a为空"
#fi
文件测试运算符.png
file="/Users/mac/Desktop/hello.sh"
##6.1 "-d file":检测文件是不是一个目录,如果是,那么返回true
#if [ -d $file ]
#then
#echo "是一个目录"
#else
#echo "不是一个目录"
#fi
6.2 "-r file": 检测文件是否可读,如果是,那么返回true
#if [ -r $file ]
#then
#echo "可读"
#else
#echo "不可读"
#fi
6.3 "-w file": 检测文件是否可写,如果是,那么返回true
#if [ -w $file ]
#then
#echo "可写"
#else
#echo "不可写"
#fi
6.4 "-x file": 检测文件是否是可执行文件,如果是,那么返回true
#if [ -x $file ]
#then
#echo "可执行"
#else
#echo "不可执行"
#fi
6.5 "-f file":检测文件是否是一个普通文件(既不是目录,也不是设备文件),如果是,那么返回true
#if [ -f $file ]
#then
#echo "文件为普通文件"
#else
#echo "文件为特殊文件"
#fi
6.6 "-s file":检测文件是否为空(文件有内容),如果是,那么返回true
#if [ -s $file ]
#then
#echo "文件有内容"
#else
#echo "文件没有内容"
#fi
6.7 "-e file": 检测文件是否存在(包含了:目录和文件),如果是,那么返回true
#if [ -e $file ]
#then
#echo "存在"
#else
#echo "不存在"
#fi

Shell脚本语言-流程控制

#语法结构
#for 变量名 in item1 item2  item3 ...
#do
#代码
#done
#代码案例一:读取简单的值
#for name in "hello" "hi" "nihao" "lk"
#do
#echo ${name}
#done
#代码案例二:读取列表复杂值(特殊字符)
#错误代码
#for name in "I don`t know"
#do
#echo ${name}
#done
#正确代码
#for name in I don\`t know
#do
#echo ${name}
#done
#代码案例三:从变量读取列表
#val="I don\`t know"
#for name in ${val}
#do
#echo ${name}
#done
#代码案例四: 读取目录->通配符
#file="/Users/daichichinpou/Desktop/*"
#for name in ${file}
#do
#    echo $name
#done
#代码案例五2:嵌套循环(类似于C语言写法)
#for ((a=1;a<5;a++))
#do
#echo ${a}
#done
#for (( a=1; a<5;a++))
#do
#     echo ${a}
#     for ((b=1;b<5;b++))
#     do
#         echo ${b}
#     done
#done
#语法结构
#while(条件)
#do
#  代码
#done
#代码案例一:基本循环
#a=1
#while(($a<10))
#do
#     echo ${a}
#     a=`expr $a + 1`
#done
#代码案例二:无限循环
#while :
#do
#echo "Hello"
#done
#while true
#do
#echo "Hello"
#done
#for((;;))
#do
#   echo "Hello"
#done
#语法结构
#case 值 in
#模式1)
#代码
#;;
#模式2)
#代码
#;;
#模式3)
#代码
#;;
#esac
#代码案例一
number=1
case $number in
1)
   echo "等于1"
;;
2)
   echo "等于2"
;;
3)
   echo "等于3"
;;
esac
#语法结构
until 条件
do
逻辑代码
done
#脚本代码
i=1
until (( $i > 1 ))
do
echo "i小于等于1"
done
until循环.png

跳出循环

for(( i=0; i < 10;i++ ))
do
     echo "当前i的值:${i}"
     if [ $i -eq 5 ]
     then 
             echo "退出循环"
              break
      fi
done
跳出单个循环.png

*跳出内部循环

for (( i=0;i<5;i++))
do
     echo "外层循环值:${i}"
     for (( j=0; j< 5;j++))
     do
          echo "内层循环j值:${j}"
          if [  $[j]  -eq  2]
          then
                  echo "退出内层循环,执行下一个操作"
                  break
          fi
       done
done
跳出内部循环.png
for (( i= 0;i<5:i++))
do
    echo "外层循环i值:${i}"
    for (( j=0 : j < 5: j++))
    do
         echo "内层循环j值:${j}"
         if [  ${j}  -eq 2 ]
         then
                 echo "退出内层循环,执行下一个循环"
                 break 2
         fi
      done
done
break.png

在这里值得注意的是:当break 0 的时候,会报如下错误.循环超出了范围.


break_0.png

因为我们这里的循环有两处.所以至少break 1 ,跳出1次循环,当大于循环的次数(比如: break 100),仍然只跳出本身循环地最高次数(2次).

跳出外部循环.png
for (( i=0;i<5;i++))
do
      if [ ${i} -eq 2 ]
      then
              echo "下一个"
              continue
       else
              echo "外层循环i值:${i}"
       fi
done
跳出循环->continue.png
上一篇下一篇

猜你喜欢

热点阅读