Shell脚本的第一行“#!”(Shebang)
脚本中的#!行(第一行)用于指示一个解释程序。
#!行的语法格式类似如下所示:
#! INTERPRETER [option] ...
Shell中的注释
“#”是注释标识符。
Bash的HERE DOCUMENT特性,添加多行的注释内容。
<<COMMENT
comment line 1
comment line 2
comment line n
COMMENT
如何设置脚本的权限和执行脚本
chmod u+x file
Shell变量进阶
$ParaMETER
${ParaMETER}
位置参数 $9之后,${10}
注意:参数名是大小写敏感
间接参数扩展:
${!ParaMETER} 用参数值做参数名。
大小写修改(Bash 4.0的新特性)
${ParaMETER^^} 全部大写
${ParaMETER,} 全部小写
${ParaMETER~} 首字母改变大小写
${ParaMETER~~}全部变换大小写
注意:大小写修改的参数扩展是Bash4.0的新特性,之前的Bash版本中无此参数扩展功能。
变量名扩展:
${!PREFIX*}
${!PREFIX@}
这种参数扩展将列出以字符串PREFIX开头的所有变量名。默认情况下,列出的这些变量名用空格分隔。
字符串移除:
${ParaMETER#PATTERN} 从开始移除,最短匹配
${ParaMETER##PATTERN} 从开始移除,最长匹配
${ParaMETER%PATTERN} 从结尾开始移除,最短匹配
${ParaMETER%%PATTERN} 从结尾开始移除,最长匹配
字符串搜索与替换:
${ParaMETER/PATTERN/STRING} 替换一个匹配
${ParaMETER//PATTERN/STRING} 替换所有匹配
${ParaMETER/PATTERN} 没有指定替换,将删除第一个匹配
${ParaMETER//PATTERN} 没有指定替换,搜友匹配将被删除
字符串长度:
${#ParaMETER}
子字符串扩展:
${ParaMETER:OFFSET}
${ParaMETER:OFFSET:LENGTH}
使用默认值:
${ParaMETER:-WORD}
${ParaMETER-WORD}
指定默认值:
${ParaMETER:=WORD}
${ParaMETER=WORD}
使用替代值:
${ParaMETER:+WORD}
${ParaMETER+WORD}
Bash 的内部变量
$BASH 变量-用于引用Bash实例的全路径名。
$HOME 当前用户的家目录
$IFS 内部字段分隔符
$OSTYPE 操作系统的类型
$SECONDS 脚本已运行的秒数
$TMOUT 超时
$UID 当前账户id
Bash中的位置参数和特殊参数
位置参数N可以被引用为${N}
Bash对一些参数的处理比较特殊。这些参数只能被引用,但不能修改它们的值。这些参数分别是
*、@、#、?、-、$、!、0和_。
*:扩展从1开始的所有位置参数。如果扩展发生在双引号内,即"$*",则扩展为包含每个参数值的单词,每个参数值用特殊变量IFS的第一个字符分隔。
@:也将扩展从1开始的所有位置参数。但当它的扩展发生在双引号内时,每个参数都扩展为分隔的单词。
#:将扩展为位置参数的个数,用十进制表示
?:上一命令执行的状态
$:将扩展为当前shell的进程号
!:扩展为最近一次执行的后台命令的进程号
0:将扩展为Shell或Shell脚本的名称。
使用declare指定变量的类型
declare命令是Bash的内部命令,用于声明变量和修改变量的属性。它与bash的另一个内部命令typeset的用法和用途完全相同。
直接使用declare命令,不指定变量名,将显示所有变量的值。
-r:declare将变量定义为只读变量,不能被清除和再赋值
-i:定义为整型变量
-x:declare命令将把指定的变量通过环境输出到后续命令
如果不知道某程序执行多长时间,把命令放在后台执行可以使用nohup
nohup COMMOND [ARG]... &
Bash中的数组变量
间接声明数组
ARRAYNAME[INDEX]=value
declare -a ARRAYNAME
declare -a linux=('Debian' 'Redhat' 'Suse' 'Fedora')
ARRAYNAME=(value1 value2 ... valueN)
若要引用数组中某一项的内容,必须要使用花括号{},如果索引编号是“@”或"*",那么数组的所有成员都将被引用.
echo ${linux[@]}
arr1=(one two three)
echo ${arr1[0]} ${arr1[1]} ${arr1[2]}
echo ${arr1[*]}
如果引用时,不指定索引编号,则引用的将是数组中的第一个元素。
使用unset可以消除一个数组或数组的成员变量。
原文地址:https://www.jb51.cc/bash/391477.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。