Bash 内置变量

Bash 内置变量

Bash默认建立了许多内置变量,有时候我们碰到一些命令执行的题目时,遇到过滤了小写字母或其他的一些特殊情况,也许能够利用Bash的内置变量来进行构造命令执行。

BASH

用途:显示bash的完整路径名。通常是:/bin/bash或/usr/local/bin/bash

root@ubuntu:~# echo $BASH
/bin/bash

BASH_VERSION

用途:bash的版本。

root@ubuntu:~# echo $BASH_VERSION
4.4.20(1)-release

FUNCNAME

用途:在函数式执行期,此变量内容即为函数式的名称。

root@ubuntu:~# function show_name() {
    echo $FUNCNAME
}
root@ubuntu:~# show_name
show_name

HISTCMD

用途:当前指令执行完后,它在历史指令中的排列编号(指定给下一个指令用的历史命令编号)。

root@ubuntu:~# echo $HISTCMD
279

HISTCONTROL

用途:控制指令是否存入历史脚本文件中。

用法:HISTCONTROL有3个可能的设定值:

ignorespace: 凡是指令开头有空格符的,不存入历史脚本文件中。

ignoredups: 连续重复的指令,只存一个。

ignoreboth: 结合前两者的功能。

HISTFILE

用途:设定历史脚本文件的路径文件名。通常是在: 家目录/.bash_history

root@ubuntu:~# echo $HISTFILE
/root/.bash_history

HISTFILESIZE

用途:设定历史脚本文件存储指令的最大行数。

root@ubuntu:~# echo $HISTFILESIZE
2000

HISTIGNORE

用途:不存入历史脚本文件的指令样式,以 : 隔开。

root@ubuntu:~# echo HISTGNORE=ls:cd:type

HOME

用途:设定用户的家目录位置。通常,root的家目录在/root,一般用户的家目录在/home/账号。替换~的结果,就是HOME变量值。

root@ubuntu:~# echo $HOME
/root

HOSTNAME

用途:显示主机名。

root@ubuntu:~# echo $HOSTNAME
ubuntu

HOSTTYPE

用途:显示主机形态。

root@ubuntu:~# echo $HOSTTYPE
x86_64

IFS

用途:定义字段分隔字符。默认值为:空格符、tab字符、换行字符(newline)。

MACHTYPE

用途:描述主机形态的GNU格式:cpu-公司-系统。

root@ubuntu:~# echo $MACHTYPE
x86_64-pc-linux-gnu

MAIL

用途:显示当前用户邮件目录。

root@ubuntu:~# echo $MAIL
/var/mail/root

MAILCHECK

用途:每隔多久就检查一次邮件。通常默认是60秒。

root@ubuntu:~# echo $MAILCHECK
60

PATH

用途:命令的搜寻路径。

root@ubuntu:~# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

PPID

用途:父进程的进程编号。

root@ubuntu:~# echo $PPID
8910

RANDOM

用途:随机函数。

此变量值,随机出现整数,范围为0-32767。不过,虽然说是随机,但并不是真正的随机,因为每次得到的随机数都一样。为此,在使用RANDOM变量前,请随意设定一个数字给RANDOM,当做随机数种子,这样才不会每次产生的随机数其顺序都一样。

root@ubuntu:~# echo $RANDOM
16191
root@ubuntu:~# echo $RANDOM
24390
root@ubuntu:~# echo $RANDOM
170

REPLY

用途:select和read没有设定读取变量时,默认的变量名称为REPLY。

SHLVL

用途:子shell的层级数。这个东西恒为1.

root@ubuntu:~# echo $SHLVL
1

$1~$n

用途:位置参数。

传入程序或函数式的参数,第一个参数$1,第二参数$2,其他类推。

请注意,若位置参数n超过9以上,则要用${n}来表示。

$0代表执行程序的名称。

root@ubuntu:~# echo $0
-bash

$*

用途:代表所有的位置参数,并且视为一个字符串。

如:test.sh ABC 123 xyz,则$*的内容为字符串“ABC 123 xyz”

$@

用途:代表所有的位置参数,但$@代表各位置参数组成的串行。

如:test.sh ABC 123 xyz,则$@的内容为”ABC”、”123″、” xyz”这3个字符串。

$

用途:位置参数的个数。

如:test.sh ABC 123 xyz,有3个参数,$#的值为3。

$?

用途:上一条命令执行结束后的传回值。通常0代表执行成功,非0代表执行有误。

"OS error code   1:  Operation not permitted"
"OS error code   2:  No such file or directory"
"OS error code   3:  No such process"
"OS error code   4:  Interrupted system call"
"OS error code   5:  Input/output error"
"OS error code   6:  No such device or address"
"OS error code   7:  Argument list too long"
"OS error code   8:  Exec format error"
"OS error code   9:  Bad file descriptor"
"OS error code  10:  No child processes"
root@ubuntu:~# echo $?
0
root@ubuntu:~# <A
-bash: A: No such file or directory
root@ubuntu:~# echo $?
1

$$

用途:目前bash shell的进程编号。

root@ubuntu:~# echo $$
9011

${#}

用途:返回变量值的长度,不输入变量则为0.

root@ubuntu:~# echo ${#}
0
root@ubuntu:~# echo ${#RANDOM}
5

$_

用途:

a. script执行时,bash的绝对路径。

b. 上一个命令执行时,最后一个位置参数,如上一个命令是:test.sh ABC 123 xyz,则$_的值为’xyz’。

c. 检查邮件时,$_的值为邮件文件名。

参考资料

Linux 基础知识:Bash的内置变量

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇