shell脚本之三:shell变量知识进阶与实践

编程

三、SHELL变量知识进阶与实践

(一)shell特殊位置变量

1.获取脚本的名字($0)

$0:获取脚本的名字,如果脚本前跟着路径的话,那就获取路径加上脚本名字。

企业应用:一般在脚本最后,使用$0获取脚本的路径和名字给用户。

2、获取脚本的第n个参数($n)

$n:获取脚本后的第n个参数,n大于9以后,数字需要用大括号括起来。

企业应用:脚本中,提取第n个参数。

3、获取脚本的所有参数个数($#)

$#:脚本后所有参数的个数。

企业应用:判断参数个数。

4、获取脚本的所有参数

$*:获取shell脚本中所有的参数。所有单数是一个整体:"$1,$2,$3"

$@:获取脚本的所有参数。每个参数是一个整体:"$1","$2","$3"

当需要接收脚本后所有参数,但是又不知道个数的时候,使用$*,$#

两者区别:

[root@centos6-kvm3 scripts]# cat test.sh

#!/bin/bash

for arg in "$*"

do

echo $arg

done

echo ------

for arg1 in "$@"

do

echo $arg1

done

echo $#

[root@centos6-kvm3 scripts]# bash test.sh "i am" oldboy teacher.

i am oldboy teacher.

------

i am

oldboy

teacher.

3

[root@centos6-kvm3 scripts]#

(二)shell进程特殊状态变量

①$?:获取上一个命令的返回值,返回值为0,表示成功,非0,表示失败。

②$$:获取当前执行脚本的进程号。

③$!:获取上一个后台工作的进程的进程号。

④$_:获取在此前执行命令或者脚本的最后一个参数。

(三)shell变量子串知识及实践(变量内容)

1、获取变量长度

[root@centos6-kvm3 scripts]# oldboy="i am oldboy"

[root@centos6-kvm3 scripts]# echo ${oldboy}

i am oldboy

${#变量}:获取变量字符个数。

[root@centos6-kvm3 scripts]# echo ${#oldboy}

11

[root@centos6-kvm3 scripts]# echo ${oldboy}|wc -L

11

计算变量字符个数方法2:

[root@centos6-kvm3 scripts]# expr length "$oldboy"

11

计算变量字符个数方法3:

[root@centos6-kvm3 scripts]# echo $oldboy| awk "{print length }"

11

[root@centos6-kvm3 scripts]# echo $oldboy| awk "{print length($0) }"

11

[root@centos6-kvm3 scripts]# echo $oldboy| awk "{print length($1) }"

1

获取变量第二个参数后参数:

[root@centos6-kvm3 scripts]# echo ${oldboy:2}

am oldboy

[root@centos6-kvm3 scripts]# echo ${oldboy:2:2}

am

[root@centos6-kvm3 scripts]#

2、匹配变量子串

${参数#字符串}:匹配开头,删除最短匹配。

[root@centos6-kvm3 scripts]# OLDBOY=abcABC12345ABCabc

[root@centos6-kvm3 scripts]# echo ${OLDBOY}

abcABC12345ABCabc

[root@centos6-kvm3 scripts]# echo ${OLDBOY#a*C}

12345ABCabc

${参数##字符串}:匹配开头,删除最长匹配。

[root@centos6-kvm3 scripts]# echo ${OLDBOY##a*C}

abc

${参数%字符串}:匹配结尾,删除最短匹配。

[root@centos6-kvm3 scripts]# echo ${OLDBOY%a*c}

abcABC12345ABC

${参数%%字符串}:匹配结尾,删除最长匹配。

[root@centos6-kvm3 scripts]# echo ${OLDBOY%%a*c}

[root@centos6-kvm3 scripts]#

3、替换字符串里的子串

${变量/part/string}:使用string替换part第一个匹配项。

[root@centos6-kvm3 scripts]# oldboy="i am oldboy oldboy"

[root@centos6-kvm3 scripts]# echo ${oldboy/oldboy/oldgirl}

i am oldgirl oldboy

${变量//part/string}:使用string替换part所有匹配项。

[root@centos6-kvm3 scripts]# echo ${oldboy//oldboy/oldgirl}

i am oldgirl oldgirl

[root@centos6-kvm3 scripts]#

(四)shell特殊变量扩展知识

1、变量临时赋值

result=${变量:-word}:当变量为空时候,将word赋值给result。冒号可以省略。

[root@centos6-kvm3 scripts]# result=${test:-UNSET}

[root@centos6-kvm3 scripts]# echo $result

UNSET

[root@centos6-kvm3 scripts]# echo $test

企业应用:

[root@centos6-kvm3 scripts]# find ${path:-/tmp} -name "*.log" -mtime +7| xargs rm -f

[root@centos6-kvm3 scripts]#

2、变量赋值

result=${变量:=word},变量为空时候,work复制给result,同时复制给变量。

[root@centos6-kvm3 scripts]# result=${test:=UNSET}

[root@centos6-kvm3 scripts]# echo ${result}

UNSET

[root@centos6-kvm3 scripts]# echo ${test}

UNSET

[root@centos6-kvm3 scripts]#

3、变量赋值提示

${变量:?word}:当变量为空时候,提示word。

[root@centos6-kvm3 scripts]# result=${test1:?变量为空}

-bash: test1: 变量为空

[root@centos6-kvm3 scripts]# echo $result

UNSET

[root@centos6-kvm3 scripts]# echo $test1

[root@centos6-kvm3 scripts]# test1=oldboy

[root@centos6-kvm3 scripts]# result=${test1:?变量为空}

[root@centos6-kvm3 scripts]# echo $result

oldboy

[root@centos6-kvm3 scripts]#

4、变量赋值覆盖

${变量:+word}:如果前面变量为空,什么不做,如果不为空,进行覆盖。

[root@centos6-kvm3 scripts]# result1=${test2:+wordk}

[root@centos6-kvm3 scripts]# echo ${result1}

[root@centos6-kvm3 scripts]# echo ${test2}

[root@centos6-kvm3 scripts]# test2=2

[root@centos6-kvm3 scripts]# result1=${test2:+wordk}

[root@centos6-kvm3 scripts]# echo ${result1}

wordk

[root@centos6-kvm3 scripts]# echo ${test2}

2

[root@centos6-kvm3 scripts]#

以上是 shell脚本之三:shell变量知识进阶与实践 的全部内容, 来源链接: utcz.com/z/515975.html

回到顶部