linux变量大于0,变量2-位置-状态-特殊变量

# **一、SHELL位置变量**

## **1.位置变量说明**

```

$0 获取当前执行的脚本文件名

$n获取当前执行的脚本的第n个参数,n大于10要用大括号,用于传参

$#获取当前脚本所有后面所接参数的总个数

$*获取当前脚本所有传参的参数

$@获取当前脚本所有传参的参数

```

> $*和$@不加双引号时无区别,加双引号时,$"*"将所有参数视为单个字符串,$"@"将所有字符串视为不同的独立字符串

## **2.$0、$#、$n联合演示**

* cat test.sh

```

if [ $# -ne 2 ]#如果传入参数不是2个

then

echo "/bin/sh $0 arg1 arg2"#提示用户脚本路径和用法

exit 1#退出并返回1

fi

echo $1 $2#满足2个参数则执行命令

```

* sh test.sh

`/bin/sh test.sh arg1 arg2.`不加参数,提示用户用法

* sh test.sh ni wo

`ni wo`正确执行结果

# **二、shell状态变量**

## **1.特殊状态变量**

|变量|用途|

|---|---|

|$?|获取上一个指令的执行状态返回值(0表示成功,非0表示失败,很常用)|

|$$|获取当前执行的脚本的进程号(PID)|

|$!|获取上一个在后台工作的进程的进程号(PID)|

|$_|获取在此之前执行的命令或脚本的最后一个参数 |

## **2.$?用途详解**

1. 不同命令的执行结果中,$?的返回值不尽相同,但常用的就是0和非0两种状态,0表示成功,非0表示失败,可以通过获取返回值,来确定程序是否执行成功。

2. 在对数据进行备份时,在执行完关键命令后,获取返回值,来确定命令是否成功,备份数据是否完成

* **在企业场景中,$?的用法如下**

* 判断命令、脚本或函数等程序是否执行成功

* 坐在脚本中执行“exit 数字”,则会返回这个数字给$?变量

* 如果是再函数中,则通过“return 数字”吧这个数字传给$?S

## **3.$?脚本案例讲解**

* sed -n '63,73p' /etc/init.d/rpcbind

```

stop() {

echo -n $"Stopping $prog: "

killproc $prog

RETVAL=$?#将$?的值赋值给变量RETVAL

echo

[ $RETVAL -eq 0 ] && {#判断当返回值为0是,执行下面操作

rm -f /var/lock/subsys/$prog

rm -f /var/run/rpcbind*

}

return $RETVAL

```

> 如果返回值不为0,不执行命令,将返回值传递给stop脚本

# **三、shell特殊变量**

## **1.语法和功能**

| 变量名| 变量作用说明 |

| --- | --- |

| ${var:-word} | 如果变量未赋值或为空,则用word值替代 |

| ${var:=word} | 如果变量未赋值或为空,则用word值赋值并替代 |

| ${var:+word} | 如果变量已赋值或为不为空,则用word值替代 |

| ${var:?word}} | 如果变量未赋值或为空,则用word值作为错误输出 |

> 冒号非必须,省略冒号,则只针对未赋值的变量,加上冒号,就包括为空的变量

## **2.演示案例**

* cat /server/scripts/t2.sh

```

echo 'echo ${var:-ttt}-->' ${var:-ttt}

echo 'echo $var-->' $var

echo 'echo ${var:=ttt}-->' ${var:=ttt}

echo 'echo $var-->' $var

echo 'echo ${var:+MMM}-->' ${var:+MMM}

echo 'echo $var-->' $var

echo 'unset var and echo ${var:?the error}-->'

unset var

echo ${var:?the error}

```

* sh /server/scripts/t2.sh

```

echo ${var:-ttt}--> ttt

echo $var-->

#变量未赋值,则用ttt代替输出,查看变量仍然未赋值

echo ${var:=ttt}--> ttt

echo $var--> ttt

#变量未赋值,则用ttt代替输出,查看变量已被赋值

echo ${var:+MMM}--> MMM

echo $var--> ttt

#变量已赋值,则用MMM代替输出,查看变量仍然为ttt

unset var and echo ${var:?the error}-->

/server/scripts/t2.sh: line 9: var: the error

#变量未赋值则输出定义的报警信息

```

## **3.企业工作用途**

在企业中,针对目录路径等的处理就可以上述变量不存在则赋值的方式,防止因目录路径不存在而导致的异常,特别是针对变量的删除操作,这种方式很有用,否则删除的变量不存在时,可能 导致未知的危险

`find ${path:-/tmp} -name "*.tar.gz" -type f -mtime +7|xargs rm -f`

> 如上命令,当路径变量不存在时,用/tmp路径代替

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值