您的位置:首页 > 运维架构 > Shell

shell笔记

2016-05-09 10:35 375 查看
shell有两种执行命令的方式:
        1.交互式,用户输入一条命令就执行一条命令。

        2.批处理,用户输入一系列的命令存在一个shell脚本中,让shell一次把这些命令执行完,而不是一条条执行。

        #!/bin/bash

        echo 'hello'

        使用命令chmod +x ./脚本名  让脚本有执行权限,否则无法运行。 ./脚本名.sh  即可运行脚本。

        shell变量:

        shell里面变量名开头必须是字母,不能有空格,不能使用标点符号。只能包含字母,下划线,数字

        输出变量时才加上$符号,变量名最好用花括号包起来,否则当变量名和其他的一些语句拼接时,不会解析变量。

        readonly  +变量名  设为只读的变量名后,之后对该变量进行的修改将失败。它会读取该变量设为保护之前的值

        unset :删除变量  ,unset不能删除状态为readonly的变量。

        获取变量长度:${#变量名}

        截取变量:${变量名:几位开始截取:截取几位}

       

        shell数组:shell中,只支持一维数组,跟php类似,单元已0开始,数组中的元素单元用空格隔开,array=(v1 v2 v3)

        读取数组:${arrayname[0]}读取某个单元格的值,值为@的时候表示读取整个数组

        获取数组长度:${#arrayname[@]}  |  ${#arrayname[*]}

        如需要注释大段代码可以把它用大括号括起来定义为一个函数,没有地方调用这个函数,他就不会执行

       

        shell传递参数:运行脚本的时候,后面带上参数,参数的顺序为$1,$2..$n

        特殊变量:

$0当前脚本的文件名
$n传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
$#传递给脚本或函数的参数个数。
$*传递给脚本或函数的所有参数。
$@传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到。
$?上个命令的退出状态,或函数的返回值。
        shell替换

        命令替换,如date函数,shell中使用他,需要加上反引号``,否则会当成字符串解析

        变量替换:     

${var}变量本来的值
${var:-word}如果变量 var 为空或已被删除(unset),那么返回 word,但不改变 var 的值。
${var:=word}如果变量 var 为空或已被删除(unset),那么返回 word,并将 var 的值设置为 word。
${var:?message}如果变量 var 为空或已被删除(unset),那么将消息 message 送到标准错误输出,可以用来检测变量 var 是否可以被正常赋值。

若此替换出现在Shell脚本中,那么脚本将停止运行。
${var:+word}如果变量 var 被定义,那么返回 word,但不改变 var 的值。
       

        shell运算符:

        bash中。我们运算经常用到的是expr命令,如计算和sum=`expr 2 + 2` 运算值之间要有空格

        加:+  减:-  乘:\* 除:/  取模:%

        shell判断结构:

        if []  //变量与括号需要有空格  ,变量和运算符也要有空格

        then

        echo 'ok'

        else

        echo 'fail'

        fi   //结束标符,括号里面用到-ne -eq这类判断返回true或者false的,返回true走第一个,返回false走else步

-eq检测两个数是否相等,相等返回 true。[ $a -eq $b ] 返回 true。
-ne检测两个数是否相等,不相等返回 true。[ $a -ne $b ] 返回 true。
-gt检测左边的数是否大于右边的,如果是,则返回 true。[ $a -gt $b ] 返回 false。
-lt检测左边的数是否小于右边的,如果是,则返回 true。[ $a -lt $b ] 返回 true。
-ge检测左边的数是否大等于右边的,如果是,则返回 true。[ $a -ge $b ] 返回 false。
-le检测左边的数是否小于等于右边的,如果是,则返回 true。[ $a -le $b ] 返回 true。
        布尔运算符

!非运算,表达式为 true 则返回 false,否则返回 true。[ ! false ] 返回 true。
-o或运算,有一个表达式为 true 则返回 true。[ $a -lt 20 -o $b -gt 100 ] 返回 true。
-a与运算,两个表达式都为 true 才返回 true。[ $a -lt 20 -a $b -gt 100 ] 返回 false。
        字符串运算符
        

=检测两个字符串是否相等,相等返回 true。[ $a = $b ] 返回 false。
!=检测两个字符串是否相等,不相等返回 true。[ $a != $b ] 返回 true。
-z检测字符串长度是否为0,为0返回 true。[ -z $a ] 返回 false。
-n检测字符串长度是否为0,不为0返回 true。[ -z $a ] 返回 true。
str检测字符串是否为空,不为空返回 true。[ $a ] 返回 true。
        检查字符串是否为空,$[变量名] 为空返回false
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: