shell变量详解,Bash内置变量

作者: 操作系统  发布:2019-09-06

BASH内置变量
(1).BASH
   成效:bash的总体路线.默以为/bin/bash
(2).BASH_ENV
   功效:仅在非交互情势中适用.在施行shell脚本时,会先检查该变量是不是钦命了开行
        脚本,若钦命则先执行它内定的开发银行脚本.
(3).BASH_VERSION
   成效:bash的版本号
 
   实例:echo $BASH_VERSION
(4).CDPATH
   成效:cd的找出路线,七个门路用':'隔离
   实例:  CDPATH="/tmp/A/B:/var/log"
          (假如当前目录为/home/example)
          mkdir -p /tmp/A/B/C
          cd C  #暗中认可cd会先在当前目录中检索是或不是留存C目录,若一纸空文则会在CDPATH变量钦赐的路子中寻觅,会进来/tmp/A/B/C
(5).EUID
   效率:有效的使用者的UID.
(6).FUNCNAME
   作用:在函数施行时期,该变量的值为函数名
   实例:
        hello()
        {
            echo "那一个函数名称叫$FUNCNAME"
         }
        hello  #结果展现为"这一个函数名称叫hello"
(7).HISTFILE
   成效:钦命历史脚本文件的路子,平日为~/.bash_history
(8).HISTFILESIZE
   作用:设定历史文件的储存的最大指令数
(9).HISTIGNORE
   作用:钦点不存入历史脚本文件的通令体系,多少个指令用':'隔绝
   实例: HISTIGNORE=ls:ps:cd:t*:&
   表达:上边点名不存款和储蓄到历史脚本中的指令有ls,ps,cd,和以t最初的指令,以及后台指令(&)
(10).HOME
    成效:设置客户的主目录,用以替换为~的值
(11).HOSTNAME
 
    功效:设置主机名
(12).HOSTTYPE
    功效:设置主机的项目
(13).IFS
    功能:定义字段分隔符,默感觉:空白符(空格,tab,换行)
    实例:
         MY="1:2:3:4:5"
         IFS=:
         for i in $MY;do
            echo $i
         done
    结果:
         1
         2
         3
         4
         5
(14).INPUTRC
   
    功能:设定命令行函数或库readline的开发银行配置文件,可覆盖~/.inputrc的设定
(15).LANG
    效率:设置当前语系的称谓
(16).LC_ALL
    成效:设置当前的locale,可覆盖LANG和LC_*的设置
(17).LC_CTYPE
    成效:设置locale的字符分类
(18).MACHTYPE
 
    效率:描述主机形态的GNU格式:  CPU-公司-系统
    实例:  echo $MACHTYPE  #i686-pc-linux-gnu
(19).OLDPATH
    功用:前贰个办事目录
    实例:cd -  等价  cd $OLDPATH
(20).PATH
    效用:设置外界命令的搜索路线,八个以':'隔离
(21).PPID
 
    作用:父进度的PID
(22).PS1(这一个是数字1)
    成效:设置主提醒标记,默以为s-v$
(23).PS2
    成效:设置次提示标识,默以为 >
(24).PS3
    作用:设置select的提示符,默感到  #?
(25).PWD
    作用:当前的办事目录
    实例:  echo $PWD 等价 pwd
(26).SECONDS
    功能:显示当前shell的运营的年月(单位:s)
    实例:echo $SECONDS
(27).SHELL
    作用:当前利用的shell名,默以为/bin/bash
(28).TMOUT
    功能:若该变量的值大于0的话,则bash会在守候TMOUT秒后还未曾其它操作就能自行终止近些日子的bash shell.
    实例:
 
          echo 'TMOUT=600'>>/etc/profile  #在10min内并未有别的操作的话则自动撤除当前系统
(29).UID
    作用:用户ID号
(30).$1,$2,...,$N
    效率:地点参数,当高出9时用${N}来代表。
(31).$$
    作用:当前的经过号
    实例:echo $$
(32).$?
    功用:上三个限令的淡出状态
    实例:echo $?
    表达:一般采用那些变量来判别上二个发令是不是科学实行,一般的话当该值为0时期表上一个下令正确实践,不然未有准确实施
(33).$#
     作用:地方参数的个数
(34).$!
     功用:上三个后台推行顺序的进度ID号。
     实例:  top &  #如果他的PID为2112
            echo $!  #结果为2112
作者“huangyandong”

本文转发自Hello,Barry的shell变量详解
1 shell变量基础
shell变量是一种很“弱”的变量,私下认可景况下,二个变量保存三个串,shell不关心那一个串是何等意思。所以若要实行数学生运动算,必得运用部分限令比如let、declare、expr、双括号等。shell变量可分为两类:局部变量和情形变量。局地变量只在开创它们的shell中可用。而景况变量则足以在创制它们的shell及其派生出来的大肆子进度中使用。某些变量是客商成立的,其余的则是专用shell变量。变量名必需以字母或下划线字符开始。别的的字符可以是字母、数字(0~9)或下划线字符。任何其余的字符都标识着变量名的终止。名字是高低写敏感的。给变量赋值时,等号周边不可能有其他层空间白符。为了给变量赋空值,能够在等号后跟三个换行符。用set命令可以查阅全体的变量,unset var命令可避防去变量var,var也正是尚未定义过。readonly var能够把var变为只读变量,定义之后不能够对var举行另外改变。对shell变量的援引方式比比较多,用这个艺术能够一本万利的获取shell变量的值,变量值的长度,变量的八个字串,变量被有个别替换后的值等等。shell变量常见援引方式如下:

(1).BASH 效率:bash的共同体路径.默以为/bin/bash (2).BASH_ENV 功用:仅在非交互情势中适用.在实施shell脚本时,会先检查该变量是或不是钦赐了...

2 情形变量
意况变量的定义方法如下:
var=value
export var
shell在开端化的时候会在施行profile等伊始化脚本,脚本中定义了一部分蒙受变量,那几个变量会在创立子进度时传递给子进度。
用env命令能够查阅当前的情形变量。常用的系统蒙受变量如下:
(下划线) 上一条命令的末段多个参数
BASH 实行为调用bash实例时行使的全套径名
CDPATH cd命令的检索路径。它是以冒号分隔的目录列表,shell通过它来搜寻cd命令钦命的指标目录。比方.:~:/usr
EDITOTiguan 内置编辑器emacs、gmacs或vi的路线名
ENV 每一个新的bash shell(包涵剧本)运行时实践的条件文件。常常赋予这么些变量的文本名是.bashrc。
EUID 举行为在shell运维时被初步化的此时此刻客户的实惠ID
GROUPS 当前客户所属的组
HISTFILE 钦点保存命令行历史的文本。暗中同意值是~/.bash_history。假诺被重新恢复设置,交互式shell退出时将不保存命令行历史
HISTSIZE 记录在命令行历史文件中的命令数。默许是500
HOME 主目录。未钦定目录时,cd命令将转速该目录
IFS 内部字段分隔符,一般是空格符、制表符和换行符,用于由命令替换,循环结构中的表和读取的输入爆发的词的字段划分
LANG 用来为未有以LC
开班的变量分明选取的等级有层有次locale类
OLDPWD 前五个职业目录
PATH 命令搜索路线。一个由冒号分隔的目录列表,shell用它来研究命令,一个普通值为 /usr/gnu/bin:/usr/local/bin:/usr/ucb:/usr/bin
PPID 父进度的经过ID
PS1 主指示符串,默许值是$
PS2 次提醒符串,暗中同意值是>
PS3 与select命令一道使用的选项提醒符串,默许值是#?
PS4 当展开追踪时采纳的调度提醒符串,暗中同意值是+。追踪能够用set –x开启
PWD 当前职业目录。由cd设置
RANDOM 每一回引用该变量,就时有发生贰个随机整数。随机数体系能够经过给RANDOM赋值来早先化。假使RANDOM被重新恢复设置,纵然随后再安装,它也将失去一定的特性
REPLY 当未有给read提供参数时设置
SHELL 当调用shell时,它扫描意况变量以搜寻该名字。shell给PATH、PS1、PS2、MAILCHECK和IFS设置暗许值。HOME和MAIL由login(1)设置
SHELLOPTS 包涵一列开启的shell选项,譬喻braceexpand、hashall、monitor等
UID 进行为近些日子客户的客户ID,在shell运行时开端化
3 数值变量
shell中暗中认可把变量值当作字符串,例如:
age=22
age=${age}+1
echo ${age}
输出结果为22+1,而不是23,因为shell将其解释为字符串,并不是数学生运动算。
可以用let命令使其进展数学生运动算,举个例子:
let age=${age}+1
也能够用declare把变量定义为整型。比方:
declare -i age=22
此处就用 -i 选项把age定义为整型的了。此后每回运算,都把age的右值识别为算术表明式或数字。
4 数组
在shell中得以选取数组,举个例子:
array[0]=0
array[1]=1
array[2]=2
则array就是四个数组,也足以如此给数组伊始化:
array=(0 1 2) // 成分之间以空格分隔
能够因此 ${array[$i]}来拜会array中某些成分,${array[]} 的再次回到值即数组的具有因素结合的串,${#array[]} 的重返值即数组的因素个数,${array[*]:0:2} 重返第2个和第叁个成分结合的串。0意味最初的地方,2意味要回来的要素个数,初步地点可感觉0-2(0减去2)之类的,表示从尾数第四个因素开端。
下边写个稍微复杂点的事例:
复制代码

1 #!/bin/bash
2 for ((i=0; i<100; i++))
3 do
4 array[$i]=$i
5 done
6 for ((i=0; i<100; i++))
7 do
8 echo ${array[$i]}
9 done

复制代码

假诺要采取二维数组以致三维数组该怎么落实吗,那就须要用eval命令来效仿数组的法力了。
eval命令的作用是扫描命令三次再实行,若是不利用eval,只扫描二回,然后实行。看个例子:
root@suse:~$ name=Barry
root@suse:~$ $name=hello
Barry=hello: command not found
怎么第二句给Barry变量赋值会出错呢?从报错音信方可窥见shell并从未辨别那是个赋值语句,而是把Barry=hello当作三个指令来施行,当然会报错。为何不可能鉴别这是赋值语句呢?第一遍扫描时,因为扫描到$符号,所以不可能把那句当作赋值语句,赋值语句的右臂总是一个变量名,而不应该是$初叶的。所以率先次扫描仅仅识别了$name变量,并做了替换,而并未认知到赋值语句。
一经运用eval $name=hello呢?
root@suse:~$ name=Barry
root@suse:~$ $name=hello
Barry=hello: command not found
root@suse:~$ eval $name=hello
root@suse:~$ echo $Barry
hello
可见使用了eval之后,对 $name=hello 第二遍扫描替换了$name,没有识别赋值语句,第三回扫描识别是赋值语句,然后实践。今后大要能够想到怎样用eval完成二维数组了。
下边达成的二维数组每一行代表一个人的信息记录,满含姓名,年龄。
复制代码

1 for ((i=0; i<2; i++))
2 do
3 for ((j=0; j<2; j++))
4 do
5 read man$i$j
6 done
7 done
8 echo "next print:"
9 for ((i=0; i<2; i++))
10 do
11 for ((j=0; j<2; j++))
12 do
13 eval echo -n "$man$i$j:"
14 done
15 printf "n"
16 done

复制代码

5 特殊变量
$0:当前剧本的文件名
$num:num为从1初阶的数字,$1是第二个参数,$2是第四个参数,${10}是第十二个参数
$#:传入脚本的参数的个数
$*:全数的岗位参数(作为单个字符串)
$@:全数的地方参数(每一种都看作单身的字符串)。
$?:当前shell进度中,上多少个指令的重返值,即使上二个发令成功实施则$?的值为0,不然为任何非零值,常用做if语句条件
$$:当前shell进程的pid
$!:后台运转的终极八个经过的pid
$-:展现shell使用的此时此刻挑选
$_:在此之前命令的尾声五个参数

本文由今晚开什么码发布于操作系统,转载请注明出处:shell变量详解,Bash内置变量

关键词:

上一篇:没有了
下一篇:没有了