shell中的变量

Shell中变量命名法则

  1. 不能使程序中的保留字:例如if, for
  2. 只能使用数字、字母及下划线,且不能以数字开头
  3. 见名知义
  4. 统一命名规则:驼峰命名法

Shell中命名建议规则

  1. 变量名大写
  2. 局部变量小写
  3. 函数名小写
  4. 用英文名字,并体现出实际作用

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 name

PS1和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
MAIL
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
posted @ 2023-02-23 14:20  厚礼蝎  阅读(29)  评论(0编辑  收藏  举报