2019-05-28 shell变量

$0  脚本名称

$# 脚本后接收的参数个数

$n 当前执行脚本的第n个参数,大于9的要用{}括起来

$@  获取当前脚本的所有传参,加引号"$@"="$1" "$2" "$3"

$*  获取当前脚本的所有传参,加引号"$*"="$1 $2 $3"

$? 获取上个指令的执行状态返回值

$$ 当前执行的脚本进程号

$!上一个执行的脚本进程号



${parameter} 返回变量$parameter的内容

${#parameter} 返回变量$parameter内容的长度(按字符),也适合特殊变量*

${parameter:offset} 在变量${parameter}中,从位置offset之后开始提取子串到结尾

${parameter:offset:length} 在变量${parameter}中,从位置offset之后开始提取长度为length的子串

#删除

${parameter#word} 从变量${parameter}【开头】开始删除最【短】匹配的word子串

${parameter##word} 从变量${parameter}【开头】开始删除最【长】匹配的word子串

${parameter%word} 从变量${parameter}结尾开始删除最短匹配的word子串

${parameter%%word} 从变量${parameter}结尾开始删除最长匹配的word子串

#类似sed替换

${parameter/pattern/string}     使用string代替第一个匹配的pattern

${parameter//pattern/string} 使用string代替所有匹配的pattern



获取变量内容长度的方法:

echo $OLDBOY|wc -L

 echo ${#OLDBOY}

 expr length "$OLDBOY"

echo $OLDBOY|awk '{print length}'

 echo $OLDBOY|awk '{print length($0)}'

 result=${test:-unset}----------------变量名=${值:-替换值}(当值为空时会用替换值代替原有值)


数值运算:

1)整数运算:

方法1:

 let a=a+1

方法2:推荐小括号

 ((a=a+1))

方法3:尽量不用做运算

expr $a + 111

方法4:

 echo $[$a+11]

方法5:

declare -i a=a+10

整数或者小数运算:

bc(内置计算器)

echo 1+2|bc

(()) 逻辑判断

 a=10

 ((a++)) 递归增加,默认步长为1

 ((a--)) 递归减小,默认步长为1


expr功能:

1)计算

 expr 10 + 10

2)获取字符串长度

 expr length "$a"

3)判断字符串是否为整数数字或字符

 expr $a + 1 &>/dev/null

 echo $?

0


 expr $a + 1 &>/dev/null

 echo $?

2

4)用来判断文件扩展名是否符合指定扩展名

[root@web01 /server/scripts]# cat judge.sh

  if expr "$1" : ".*\.avi$" >/dev/null ; then

    echo "好兴奋啊"

  else

    echo "好失望啊"

  fi

[root@web01 /server/scripts]# sh judge.sh oldboy.avi

好兴奋啊

[root@web01 /server/scripts]# sh judge.sh oldboy.log

好失望啊

你可能感兴趣的:(2019-05-28 shell变量)