注释方法
方法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为任意字符,数值,单词等等
注意 :关联数组必须先声明再调用