注释方法

方法1

:<<任意字符或者数字

被注释的内容

任意字符或者数字

例1:

:<<!

echo hehe

echo enen

!

例2:

:<<'

echo hehe

echo enen

'

例3:

:<<#

echo hehe

echo enen

#

方法2

if false;then

被注释的内容

fi

例:

if false;then

echo hehe

echo enen

fi

方法3

((0)) && {

被注释的内容

}

例:

((0)) && {

echo hehe

echo enen

}

屏蔽输出

示例

1. 屏蔽标准输出和错误输出

  command > /dev/null 2>&1

2. 仅屏蔽错误输出

  command 2>/dev/null

3. 屏蔽所有输出

  &>/dev/null

  //所有文件描述符,通通重定向到/dev/null

其他解析

1. >/dev/null 与 1>/dev/null

  说明:1表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于 "1>/dev/null"

2. >/dev/null 2>&1 与 >/dev/null 2>/dev/null

  >/dev/null 2>&1 : 

        将stdout直接送向/dev/null, stderr 继承了FD1管道后,再被送往file,此时,file 只

    被打开了一次,也只使用了一个管道FD1,它包括了stdout和stderr的内容。

  >/dev/null 2>/dev/null:

        将命令所产生的标准输出信息,和错误的输出信息送到file中 command > file 2>file 

    这样的写法,stdout和stderr都直接送到file中, file会被打开两次,这样stdout和stderr

    会互相覆盖,这样写相当使用了FD1和FD2两个同时去抢占file 的管道。

3. >/dev/null 2>&1 与 2>&1 >/dev/null 

  2>&1 >/dev/null : 标准错误打印到屏幕,而标准输出不打印到屏幕。

注意事项

第一行#!/bin/sh创建

        #!/bin/sh这一行必须是在Linux下创建,不能再Windows下创建。在linux下创建完这一行,然后输入回车,之后可以在Windows下编辑。

调用printf

        脚本调用printf不会自动加回车,如果格式需要回车,必须在后边写echo ”“,不然,可能会影响全局的回车效果。

比如:  会使得其他的echo都不自动加回车了,原因是什么暂不清楚。

shell脚本调用应用程序

如果需要带参数,直接用即可。将参数放到括号内。

    例如: 

    执行应用:app1 -w 2048 -r 2048

    shell中:app1 -w 2048 -r 2048

  注意:如果不成功,将参数放到括号内:app1 "-w 2048 -r 2048"

数组

参考网址:​​shell脚本-数组​

基本知识

    变量:存储单个元素的内存空间。

    数组:存储多个元素的连续的内存空间,相当于多个变量的集合。

    数组索引:编号从0开始,属于数值索引。索引可支持使用自定义的格式,而不仅是数值格式,即为关联索引。

数组赋值

    数组元素的赋值:

        一次只赋值一个元素;

            ARRAY_NAME[INDEX]=VALUE

            weekdays[0]="Sunday"

            weekdays[4]="Thursday"

        一次赋值全部元素:

            ARRAY_NAME=("VAL1" "VAL2" "VAL3" ...)   (用空格隔开)

        只赋值特定元素:

            ARRAY_NAME=([0]="VAL1" [3]="VAL2" ...)

        交互式数组值对赋值

            read -a ARRAY ;在一行输入

    显示所有数组:

        declare -a

    追加元素到数组

        ARRAY[${#ARRAY[*]}]=value

数组引用

    引用数组元素 :

        ${ARRAY_NAME[INDEX]}

        注意:[INDEX] 表示引用下标为INDEX的元素

    引用数组所有元素:

        ${ARRAY_NAME[*]}

        ${ARRAY_NAME[@]}

    数组中元素的个数:

        ${#ARRAY_NAME[*]}

        ${#ARRAY_NAME[@]}

    引用数组中的某些元素

        称为数组切片

        ${ARRAY[@]:offset:number}  

            offset:  要跳过的元素个数

            number:  要取出的元素个数

        ${ARRAY[@]:offset}  ##取偏移量之后的所有元素

删除数组

    删除数组中的某元素:

        导致稀疏格式

        unset ARRAY[INDEX]

    删除整个数组 :

        unset ARRAY

关联数组

    declare -A $ARRAY_NAME

    ARRAY_NAME=([idx_name1]='val1' [idx_name2]='val2‘...)

    idx_name为任意字符,数值,单词等等

    注意 :关联数组必须先声明再调用