微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Shell编程基础一

  1. Shell脚本的第一行“#!”(Shebang)

    脚本中的#!行(第一行)用于指示一个解释程序。

    #!行的语法格式类似如下所示:

    #! INTERPRETER [option] ...

    注意:INTERPRETER必须是一个程序的绝对路径

  2. Shell中的注释

    “#”是注释标识符。

    Bash的HERE DOCUMENT特性,添加多行的注释内容

    <<COMMENT

    comment line 1

    comment line 2

    comment line n

    COMMENT

  3. 如何设置脚本的权限和执行脚本

    chmod u+x file

  4. Shell变量进阶

    $ParaMETER

    ${ParaMETER}

    位置参数 $9之后,${10}

    注意:参数名是大小写敏感

    间接参数扩展:

    ${!ParaMETER} 用参数值做参数名。

    大小写修改(Bash 4.0的新特性)

    ${ParaMETER^} 第一个字母大写

    ${ParaMETER^^} 全部大写

    ${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}


  5. Bash 的内部变量

    $BASH 变量-用于引用Bash实例的全路径名。

    $HOME 当前用户的家目录

    $IFS 内部字段分隔符

    $OSTYPE 操作系统的类型

    $SECONDS 脚本已运行的秒数

    $TMOUT 超时

    $UID 当前账户id

  6. Bash中的位置参数和特殊参数

    位置参数N可以被引用为${N}

    Bash对一些参数的处理比较特殊。这些参数只能被引用,但不能修改它们的值。这些参数分别是

    *、@、#、?、-、$、!、0和_。

    *:扩展从1开始的所有位置参数。如果扩展发生在双引号内,即"$*",则扩展为包含每个参数值的单词,每个参数值用特殊变量IFS的第一个字符分隔。

    @:也将扩展从1开始的所有位置参数。但当它的扩展发生在双引号内时,每个参数都扩展为分隔的单词。

    #:将扩展为位置参数的个数,用十进制表示

    ?:上一命令执行的状态

    $:将扩展为当前shell的进程号

    !:扩展为最近一次执行的后台命令的进程号

    0:将扩展为Shell或Shell脚本的名称

    _:在shell启动时,它被设为开始运行的Shell或Shell脚本的路径。随后扩展为前一个命令的最后一个参数。

  7. 使用declare指定变量的类型

    declare命令是Bash的内部命令,用于声明变量和修改变量的属性。它与bash的另一个内部命令typeset的用法和用途完全相同。

    直接使用declare命令,不指定变量名,将显示所有变量的值。

    -r:declare将变量定义为只读变量,不能被清除和再赋值

    -i:定义为整型变量

    -x:declare命令将把指定的变量通过环境输出到后续命令

    -p:显示变量的属性和类型

    如果不知道某程序执行多长时间,把命令放在后台执行可以使用nohup

    nohup COMMOND [ARG]... &

  8. Bash中的数组变量

    间接声明数组

    ARRAYNAME[INDEX]=value

    显示声明一个数组变量是使用Bash的内部命令declare

    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 举报,一经查实,本站将立刻删除。

相关推荐