shell中的变量
Shell中变量命名法则
- 不能使程序中的保留字:例如if, for
- 只能使用数字、字母及下划线,且不能以数字开头
- 见名知义
- 统一命名规则:驼峰命名法
Shell中命名建议规则
- 变量名大写
- 局部变量小写
- 函数名小写
- 用英文名字,并体现出实际作用
bash中变量的种类
根据变量的生效范围等标准划分下面变量类型
局部变量:生效范围为当前shell进程;对当前shell之外的其它shell进程,包括当前shell的子shell进程均无效
环境变量:生效范围为当前shell进程及其子进程
本地变量:生效范围为当前shell进程中某代码片断,通常指函数
位置变量:$1, \(2, ...来表示,用于让脚本在脚本代码中调用通过命令行传递给它的参数 特殊变量:\)?, $0, $*, $@, \(#,\)$
局部变量
变量赋值:name=‘value’
可以使用引用value
(1) 可以是直接字串:name=“root"
(2) 变量引用:name="\(USER" (3) 命令引用:name=`COMMAND` name=\)(COMMAND)
变量引用:${name} 或者 $name
" " 弱引用,其中的变量引用会被替换为变量值
' ' 强引用,其中的变量引用不会被替换为变量值,而保持原字符串
显示已定义的所有变量:set
删除变量:unset name
环境变量
变量声明、赋值:
export name=VALUE
declare -x name=VALUE
变量引用:
$name, ${name}
显示所有环境变量:
env
printenv
export
declare -x
删除变量:
unset namePS1和PS2
提示符变量,用于设置提示符格式
PS1是用于设置一级Shell提示符的环境变量,也称为主提示符字符串,即改变: [root @jselab ~]#
PS1变量是[\u@\h \W]\$
,\u
、\h
、\W
和\$
表示了特定含义,\u
表示当前用户名,\h
表示表示主机名,\W
表示当前目录名,如果是root用户,\$
表示#号,其他用户,\$
则表示$号
bash内建的环境变量
PATH
SHELL
USER
UID
HOME
PWD
SHLVL
LANG
HOSTNAME
HISTSIZE
_ 下划线
只读和位置变量
只读变量:只能声明,但不能修改和删除
声明只读变量:
readonly name
declare -r name
查看只读变量:
readonly -p
位置变量:在脚本代码中调用通过命令行传递给脚本的参数
$1, $2, ...
对应第1、第2等参数,shift [n]换位置
$0
命令本身
$*
传递给脚本的所有参数,全部参数合为一个字符串
$@
传递给脚本的所有参数,每个参数为独立字符串
$#
传递给脚本的参数的个数
注意:$@ $* 只在被双引号包起来的时候才会有差异进程状态相关
$? 表示上一条命令执行后的返回值
\[ 当前进程的进程号 \]$_ 在此之前执行的命令或脚本的最后一个参数
例子:mytest1.sh
set -- 清空所有位置变量
vim /data/1.sh
#!/bin/bash
echo '第1个变量是'$1
echo '第2个变量是'$2
echo '第3个变量是'$3
echo '所有的变量为'$*
echo '所有的变量为'$@
echo '总共有'$#'个变量'
echo '本脚本是'`basename $0`
chmod +x /data/1.sh
1.sh a b c
第1个变量是a
第2个变量是b
第3个变量是c
所有的变量为a b c
所有的变量为a b c
总共有3个变量
本脚本是1.sh
垃圾箱脚本
vim rm.sh
mv -f $@ /data/null/
echo -e $@'已删除,可在\033[1;31m/data/null\033[0m中恢复'
declare
内置命令 declare 可用来声明变量。
declare [选项] variable[=value]
选项 | 含义 |
---|---|
-r | 将变量设为只读 (readonly) |
-x | 将变量输出到子shell中(export 为全局变量) |
-i | 将变量设为整型 (integer) |
-a | 将变量设置为一个数组 (array) |
-f | 列出函数的名字和定义 (function) |
-F | 只列出函数名 |
退出状态
进程使用退出状态来报告成功或失败
0 代表成功,1-255代表失败
$? 变量保存最近的命令退出状态
例如:
ping -c1 -W1 hostdown &> /dev/null
echo $?
退出状态码
bash自定义退出状态码
exit [n]
:自定义退出状态码
注意:脚本中一旦遇到exit命令,脚本会立即终止;终止退出状态取决于exit命
令后面的数字
注意:如果未给脚本指定退出状态码,整个脚本的退出状态码取决于脚本中执
行的最后一条命令的状态码`
常见的返回状态码
- 0:
执行正确 - 1:
通用错误 - 126:
命令或脚本没有执行权限 - 127:
命令没找到
$ echo $$ # 显示当前进程的 PID
9245
$ echo $? # 显示在此之前执行的命令的返回值
0
$ bash # 调用子Shell
$ echo $$ # 显示当前进程的 PID
9474
$ exit 1 # 指定返回值并返回父Shell
$ echo $? # 显示上一个Shell/脚本的返回值
1
$ list # 执行不存在的命令
bash: list: command not found
$ echo $?
127
$ touch bbb.sh
$ ./bbb.sh # 执行不具有执行权限的命令
bash: ./bbb.sh: Permission denied
$ echo $?
126
本文来自博客园,作者:厚礼蝎,转载请注明原文链接:https://www.cnblogs.com/guangdelw/p/17147810.html