美文网首页
Shell脚本操作-2

Shell脚本操作-2

作者: 做个合格的大厂程序员 | 来源:发表于2020-06-01 18:25 被阅读0次

Shell语言的echo命令

我们都知道echo是打印输出的意思,那么echo可以怎么实现输入呢

  1. 显示普通的字符串,例如:echo "iPhoneX 标配8888"
  2. 显示转义字符,例如:echo "iPhone 顶配 10000"
  3. 显示变量,例如:iphone="iphoneX" echo "${iphone} 9888"
  4. 显示换行,必须要用-e来开启转义功能,例如:echo -e "iphoneX \n hello 未来"
  5. 不换行,不换行用\c表示,例如:echo -e iPhoneX hello未来 \c echo"科技"
  6. 显示一个执行命令,例如要求输入当前时间,用date
  7. 退出命令,exit 状态(详见下方的状态表),如果一旦执行了exit之后,后面的语句就不会继续执行了。
  8. 重定向

关于状态码:

状态码 描述
0 命令执行成功
1 一般性未知错误
2 不适合的shell命令
126 命令不可执行
127 没有找到命令
130 通过ctrl+c终止的命令
255 正常范围内推出的状态码

Shell语言的数组

语法

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

初始化

方式一:

name=("404" "andy" "hello" "world")

方式二:

name=()
name[1]="404"
name[2]="Andy"
name[3]="hello"
name[4]="world"

读取数组

@或者*来输出所有的数组元素,但是@是将元素一个一个输出,*是将数组内元素组合成一个字符串输出。这点需要注意。

echo ${name[*]}
echo ${name[@]}

数组长度

之前说了在输出前面加#是输出字符串长度,这里同样适用于数组,在获取所有元素之后之后在数组前面加上#,如果是*的话,#同样适用,可以很智能的识别空格来进行对元素长度的识别解析。

echo ${#name[@]}
echo ${#name[*]}

如果需要获取单个元素字符长度我们则可以用具体的下标

echo ${#name[3]}

Shell语言的传递参数

语法定义:(终端输入)

./文件名称.sh 参数一 参数二 参数三

获取参数:

之前字符串章节说过用${1},${2}...表示,需要注意的是${0}表示文件名称

echo ${1} ${2} ${3}

特殊字符

获取脚本输入参数个数

echo ${#}

获取参数列表

echo ${*}

Shell语言的基本运算符

基本运算符

基本运算符就是我们所称的+ - * / %

a=1234
b=3214
c=`expr $a + $b`

可以注意到,在shell语言中,单纯的元素相加不能直接用+,而是必须要用expr去计算两个变量的值。而且如果调用,后面的变量名称和+之间必须要加上空格来保证变量的独立性。否则则会当成字符串输出。

注意:当且仅当用乘法的时候必须加上一个转义字符\

a=1234
b=3214
c=`expr $a \* $b`

赋值运算符

=
这个符号就很简单了,就不在做阐述了

关系运算符

一张表格阐述


Xnip2020-03-09_10-27-14

布尔运算符

一张表格阐述


Xnip2020-03-09_10-12-21

逻辑运算符

一张表格阐述


Xnip2020-03-09_10-58-05

字符串运算

一张表格阐述


Xnip2020-03-09_15-07-43

文件测试运算符

一张表格阐述


Xnip2020-03-09_15-08-30

循环控制语句

if-else

语法结构

if [条件]
    then
        代码
else if [条件]
    then
        代码
else
        代码
fi

记住判断最后要以fi结尾

例如我们来判定一个学生是不是男生:

sex="man"

if [ $sex = "man" ]
then
    echo "男生"
else
    echo "女生"
fi

for

语法结构

for 变量名 in item1 item2 item3 …
    do
        代码
    done

比如我们要循环打印一个数组中的元素:

names=("张三" "李四" "王五")
for i in ${names[@]}
do
    echo ${I}
done

while

语法结构

while(条件)
    do
        代码
    done

假设我们要一直循环直到while条件不成立

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

case

语法结构

case 值 in
    模式1)
        代码
        ;;
    模式2)
        代码
        ;;
    模式3)
        代码
        ;;
    sac

判断number的值

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

until

until跟while循环相反,当条件判断为false的时候才进入循环执行,记住此时判断循环条件要打两个括号

I=1
until (($i > 1))
do
    echo "i小于等于1"
done

跳出循环

1) 跳出单个循环用break

for ((i = 0;i < 10; i++))
do
    echo "当前i的值为:${I}"
    if [ $i -eq 5 ] 
    then
        echo "退出循环"
        break
    fi
done
  1. 直接跳出多层循环用break 层数,默认为1,例如退出2层
for ((i = 0; i < 10; i++))
do
    echo "打印所有i:${I}"
    for((j=0;j<10;j++))
    do
        echo "打印所有j:${j}"   
        if [ ${j} -eq 2 ]
        then
            echo "退出所有循环"
            break 2
        fi
    done
done
  1. 结束当前循环continue
for ((i = 0; i < 3; i++))
do
    echo "打印所有i:${I}"
    for((j=0;j<3;j++))
    do
        if [ ${j} -eq 2 ]
        then
            continue
        else
            echo "打印当前j:${j}"
        fi
    done
done

打印
打印所有i:0
打印当前j:0
打印当前j:1
打印所有i:1
打印当前j:0
打印当前j:1
打印所有i:2
打印当前j:0
打印当前j:1

相当于跳过了j=2的所有打印

相关文章

网友评论

      本文标题:Shell脚本操作-2

      本文链接:https://www.haomeiwen.com/subject/dxwszhtx.html