认识Bash

2018-11-26  本文已影响15人  南风nanfeng

1. 取用变量

你可以利用echo命令取用变量, 但是,变量在被取用时,前面必须要加
上符号『$ 』才行,举例来说,要知道 PATH 的内容,该如何是好:

# echo $PATH
/root/perl5/bin:/root/software/jdk1.8.0_144/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
# echo ${PATH}
/root/perl5/bin:/root/software/jdk1.8.0_144/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

变量的取用如上,利用echo命令可读取变量,还是一种取用方式是『${PATH}』。
那么我要如何『设定』或者是『修改』某个变量的内容呢?
很简单啦!用『等号(=)』连接变量与他的内容就好啦!举例来说: 我要将 myname 这个变量名称的内容讴定为 James ,那么:

#myname=James
#echo $myname
James

另外,变量在设定时,需要符合规格,否则会设定失败! 规则如下所示:

『myname = VBird』或『myname=VBird Tsai』
第一、双引号内的特殊字符如$等,可以保有原本的特性,如下所示:
『var="lang is $LANG"』则『echo $var』可得『lang is en_US』
第二、单引号内的特殊字符则仅为一般字符 (纯文本),如下所示:
『var='lang is $LANG'』则『echo $var』可得『lang is $LANG』
[root@localhost ~]# version=`uname -r` 
[root@localhost ~]# echo $version
3.10.0-327.el7.x86_64
[root@localhost ~]# version=$(uname -r)
[root@localhost ~]# echo $version
3.10.0-327.el7.x86_64
『PATH="$PATH":/home/bin』
『export PATH』

-9.取消变量,使用unset。

# unset version

2. 环境变量的功能

export 变量名称

如果仅仅输入【export】,不接任何变量时,那么系统把所以的变量秀出来:

[nubiadmin@sell130 ~]$ export
declare -x CLASSPATH=".:/usr/java/jdk1.8.0_161/lib:/usr/java/jdk1.8.0_161/jre/lib"
declare -x COBBLER_SERVER="172.17.12.1"
declare -x HISTCONTROL="ignoredups"
declare -x HISTSIZE="1000"
declare -x HOME="/home/nubiadmin"
declare -x HOSTNAME="sell130"
declare -x JAVA_HOME="/usr/java/jdk1.8.0_161"
declare -x JRE_HOME="/usr/java/jdk1.8.0_161/jre"
declare -x LANG="en_US.UTF-8"
declare -x LESSOPEN="||/usr/bin/lesspipe.sh %s"
declare -x LOGNAME="nubiadmin"
declare -x LS_COLORS="rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:"
declare -x MAIL="/var/spool/mail/nubiadmin"
declare -x OLDPWD
declare -x PATH="/usr/java/jdk1.8.0_161/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/nubiadmin/.local/bin:/home/nubiadmin/bin"
declare -x PWD="/home/nubiadmin"
declare -x SHELL="/bin/bash"
declare -x SHLVL="1"
declare -x SSH_CLIENT="10.206.16.68 54227 32768"
declare -x SSH_CONNECTION="10.206.16.68 54227 10.206.2.130 32768"
declare -x SSH_TTY="/dev/pts/0"
declare -x TERM="xterm"
declare -x USER="nubiadmin"
declare -x XDG_RUNTIME_DIR="/run/user/1002"
declare -x XDG_SESSION_ID="1826"

那如何将环境变量转成自定义变量呢?可以使用本章后续介绍的declare呢!

3. 变量键盘读取、数组与宣告: read, array, declare

[root@www ~]# read [-pt] variable
选项与参数:
-p :后面可以接提示字符!
-t :后面可以接等待的『秒数!』
variable 接收大变脸名
[root@localhost ncdc]# read -p "Please keyin your name: " -t 30 named
Please keyin your name: Melody
[root@localhost ncdc]# echo $named
Melody
[root@www ~]# declare [-aixr] variable
选项与参数:
-a :将后面名为 variable的变量定义成为数组 (array) 类型
-i :将后面名为 variable的变量定义成为整数数字 (integer) 类型
-x :用法与export一样,就是将后面的variable变成环境变量;
-r :将变量设定成为 readonly 类型,该变量不可被更改内容,也不能 unset


[root@localhost ncdc]# sumVal=1+1
[root@localhost ncdc]# echo $sumVal     

[root@localhost ncdc]# declare | grep sumVal   //sumVal默认是文本类型的取值
sumVal=1+1
[root@localhost ncdc]# declare -i sumVal=1+1
[root@localhost ncdc]# echo $sumVal
2

由于在默认的情况底下, bash对于变量有几个基本的定义:
第一、 变量类型默认为『字符串』,所以若不设定变量类型,则 1+2 为一个『字符串』而不是『计算式』。 所以上述第一个执行的结果才会出现那个情况癿;
第二、 bash 环境中的数值运算,预设最多仅能够达整数形态,所以 1/3 结果是 0;

现在你晓得为啥你需要变量宣告了吧?如果需要非字符串类型的变量,那就得要进行变量的宣告才行啦! 底下继续来玩些其他的declare功能:

范例二:将 sum变成环境变量
[root@www ~]# declare -x sum
[root@www ~]# export  | grep sum
declare -ix sum="450" <==果然出现了!包括有 i 与 x 的宣告!
范例三:将sum 变成只读属性,不可更改!
[root@www ~]# declare -r sum
[root@www ~]# sum=tesgting
-bash: sum: readonly variable
范例四:将 sum 变成非环境变量的自定义变量吧!
[root@www ~]# declare +x sum <== 将 - 变成 + 可以进行『取消』动作
[root@www ~]# declare -p sum <== -p 可以单独列出变量的类型
declare -ir sum="450" <== 看吧!叧剩下 i, r 癿类型,不具有 x 啰!
var[index]=content

数组的变量类型比较有趣的地方在于『读取』,一般来说,建议直接以 ${数组} 的方式。

4. 路径与指令搜寻顺序

  1. 以相对/绝对路径执行命令,例如『/bin/ls 』或『./ls 』;
  2. 由alias找到该命令执行;
  3. 由 bash 内建的(builtin)命令执行;
  4. 透过 $PATH 这个变量的顺序搜寻到的第一个命令。

5. 特殊符号释义

6.变量的删除与取代

/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

上一篇 下一篇

猜你喜欢

热点阅读