2. 定义和使⽤变量
跳转到“2. 定义和使⽤变量”- shell 变量名只能包含数字、字⺟和下划线。
- 局部变量:在脚本或命令中定义,仅在当前 shell 实例中有效。
在 Bash 中,变量名前不需要添加$。但是,当引用一个变量时,你需要添加$,Shell 支持以下三种定义变量的方式:
变量名=变量值variable='变量值' #原样输出 变量和命令,命令需要反引,一般不这么做,而是用$(包含命令的语句)variable="变量值"
# 注意,赋值号的周围不能有空格,这可能和你熟悉的大部分编程语言都不一样。使用变量时才能加$变量名 或者${变量名} 推荐后者,这样的话有边界
url=http://c.biancheng.netecho $urlname='C语言中文网'echo $nameauthor="严长生"echo $author例如
#!/bin/sha="hello world"echo $aecho 'a is ${a}'readonly 定义变量只读。
unset 删除变量。
echo -e "Value of a is $a \n" 使转义字符\n生效,可以使用的转义符:\\ \a \b \f \n \r \t \v。
特殊变量
跳转到“特殊变量”| 特殊变量 | 说明 |
|---|---|
$0 | 当前脚本的文件名 |
$n | 位置参数。第一个为 $1,第二个为 $2;第十个及以后使用 ${10} 等形式。 |
$# | 传递给脚本或函数的参数个数。 |
$* | 传递给脚本或函数的所有参数。 |
$@ | 传递给脚本或函数的所有参数。"$@" 分别保留每个参数,与 "$*" 不同。 |
$? | 上个命令的退出状态,或函数的返回值。 |
$$ | 当前 Shell 的进程 ID;在某些子 Shell 场景中仍保留父 Shell 值。 |
$0是脚本的名字,$1到$9是传递给脚本的前九个参数。$#是传递给脚本的参数数量。
#!/bin/bashecho "Script name: $0"echo "First argument: $1"echo "Total number of arguments: $#"| Shell特殊变量 | 描述 |
|---|---|
$0 | 当前脚本的文件名 |
$1 | 第一个位置参数(脚本的第一个参数) |
$2 | 第二个位置参数(脚本的第二个参数) |
$3 | 第三个位置参数(脚本的第三个参数) |
| … | … |
$9 | 第九个位置参数(脚本的第九个参数) |
$10 | 第十个位置参数(需要用大括号{},如${10}) |
$* | 所有位置参数,"$1 $2 ..." |
$@ | 所有位置参数,每个参数被双引号包围,"$1" "$2" ... |
$# | 位置参数的数量 |
$? | 上一个命令的退出状态 |
$$ | 当前脚本的进程ID |
$! | 上一个后台命令的进程ID |
$- | 显示Shell使用的当前选项,与set命令输出相同 |
$_ | 上一个命令的最后一个参数 |
$? | 上一个命令的退出状态 |
$LINENO | 当前行号 |
$FUNCNAME | 当前函数名 |
$BASH | 包含当前Bash版本信息 |
$BASH_SOURCE | 当前脚本或函数的源文件名(数组形式) |
$BASH_VERSION | 当前Bash版本 |
$SHELLOPTS | 显示当前Shell选项 |
$OPTIND | 选项参数的索引 |
$REPLY | read命令的默认变量 |
$SECONDS | 脚本开始运行以来的秒数 |
$HOSTNAME | 当前主机名 |
$HOSTTYPE | 机器类型(如x86_64) |
$MACHTYPE | 机器类型(如i386) |
$OSTYPE | 操作系统类型(如linux-gnu) |
$PWD | 当前工作目录 |
$OLDPWD | 上一个工作目录 |
$HOME | 用户的主目录 |
$LOGNAME | 当前用户的登录名 |
$USER | 当前用户的用户名 |
$EUID | 当前用户的有效用户ID |
$UID | 当前用户的用户ID |
$GROUPS | 以空格分隔的用户所属组列表 |
$SHLVL | Shell的层级 |
$IFS | 内部字段分隔符(默认为空格、制表符和换行符) |
$PATH | 命令搜索路径 |
$PS1 | 主提示符 |
$PS2 | 次级提示符 |
$PS3 | 选择列表提示符 |
$PS4 | 调试模式下的提示符 |
$COLUMNS | 终端的列数 |
$LINES | 终端的行数 |
$HISTSIZE | 历史列表的大小 |
$HISTFILE | 历史文件的路径 |
$IGNOREEOF | 忽略EOF的设置 |
$CDPATH | 改变目录时的搜索路径 |
$MAIL | 邮件文件的路径 |
$MAILCHECK | 检查新邮件的间隔时间 |
$RANDOM | 0到32767之间的伪随机数 |