Shell變量


  變量來源於數學,是計算機語言中能存儲計算結果或能表示值的抽象概念。變量可以通過變量名來訪問。

(1).shell變量的設置規則

  1.變量名通常由大小寫字母、數字和下划線(_)組成,但不能以數字開頭

  2.通過等號(=)為變量分配值,等號兩邊不能有空格

  3.變量存儲的數據類型是整數值和字符串值

  4.在對變量賦於字符串值時,建議使用引號將其包裹。如果字符串中存在空格,請一定要使用單引號或雙引號將整個內容包裹。注意:單引號里的內容原封不動的輸出,雙引號里有變量的調用則會調用變量

[xf@xuexi ~]$ Var=1
[xf@xuexi ~]$ Var1="$Var"
[xf@xuexi ~]$ Var2='$Var'
[xf@xuexi ~]$ echo $Var1
1
[xf@xuexi ~]$ echo $Var2
$Var

  5.要對變量進行調用時,在變量名前加美元符號$

  6.如果需要增加變量的值,那么可以進行變量值的疊加。不夠變量需要用雙引號包含"$變量名"或${變量名}

[xf@xuexi ~]$ VAR1=mysql
[xf@xuexi ~]$ echo $VAR1
mysql
[xf@xuexi ~]$ echo ${VAR1}db.log
mysqldb.log
[xf@xuexi ~]$ echo "$VAR1"db.log
mysqldb.log
[xf@xuexi ~]$ echo $VAR1db.log    //如果直接寫有可能會輸出錯誤內容
.log

(2).變量的分類

按照變量的作用可以分為4類:

  1.環境變量:這種變量中主要保存的是與系統操作環境相關的數據,通常都是大寫字母

[xf@xuexi ~]$ env    //當前用戶的環境變量,系統設置好的,不需要手動設置,可以拿來直接用
XDG_VTNR=1
SSH_AGENT_PID=8320
XDG_SESSION_ID=1
HOSTNAME=xuexi
IMSETTINGS_INTEGRATE_DESKTOP=yes
VTE_VERSION=5202
TERM=xterm-256color
SHELL=/bin/bash
XDG_MENU_PREFIX=gnome-
HISTSIZE=1000
GNOME_TERMINAL_SCREEN=/org/gnome/Terminal/screen/a06cda42_b399_47cd_bc6b_213b4228b9a7
IMSETTINGS_MODULE=IBus
USER=xf
LS_COLORS=rs=0:di=38;5;27:ln=38;5;51:mh=44;38;5;15:pi=40;38;5;11:so=38;5;13:do=38;5;5:bd=48;5;232;38;5;11:cd=48;5;232;38;5;3:or=48;5;232;38;5;9:mi=05;48;5;232;38;5;15:su=48;5;196;38;5;15:sg=48;5;11;38;5;16:ca=48;5;196;38;5;226:tw=48;5;10;38;5;16:ow=48;5;10;38;5;21:st=48;5;21;38;5;15:ex=38;5;34:*.tar=38;5;9:*.tgz=38;5;9:*.arc=38;5;9:*.arj=38;5;9:*.taz=38;5;9:*.lha=38;5;9:*.lz4=38;5;9:*.lzh=38;5;9:*.lzma=38;5;9:*.tlz=38;5;9:*.txz=38;5;9:*.tzo=38;5;9:*.t7z=38;5;9:*.zip=38;5;9:*.z=38;5;9:*.Z=38;5;9:*.dz=38;5;9:*.gz=38;5;9:*.lrz=38;5;9:*.lz=38;5;9:*.lzo=38;5;9:*.xz=38;5;9:*.bz2=38;5;9:*.bz=38;5;9:*.tbz=38;5;9:*.tbz2=38;5;9:*.tz=38;5;9:*.deb=38;5;9:*.rpm=38;5;9:*.jar=38;5;9:*.war=38;5;9:*.ear=38;5;9:*.sar=38;5;9:*.rar=38;5;9:*.alz=38;5;9:*.ace=38;5;9:*.zoo=38;5;9:*.cpio=38;5;9:*.7z=38;5;9:*.rz=38;5;9:*.cab=38;5;9:*.jpg=38;5;13:*.jpeg=38;5;13:*.gif=38;5;13:*.bmp=38;5;13:*.pbm=38;5;13:*.pgm=38;5;13:*.ppm=38;5;13:*.tga=38;5;13:*.xbm=38;5;13:*.xpm=38;5;13:*.tif=38;5;13:*.tiff=38;5;13:*.png=38;5;13:*.svg=38;5;13:*.svgz=38;5;13:*.mng=38;5;13:*.pcx=38;5;13:*.mov=38;5;13:*.mpg=38;5;13:*.mpeg=38;5;13:*.m2v=38;5;13:*.mkv=38;5;13:*.webm=38;5;13:*.ogm=38;5;13:*.mp4=38;5;13:*.m4v=38;5;13:*.mp4v=38;5;13:*.vob=38;5;13:*.qt=38;5;13:*.nuv=38;5;13:*.wmv=38;5;13:*.asf=38;5;13:*.rm=38;5;13:*.rmvb=38;5;13:*.flc=38;5;13:*.avi=38;5;13:*.fli=38;5;13:*.flv=38;5;13:*.gl=38;5;13:*.dl=38;5;13:*.xcf=38;5;13:*.xwd=38;5;13:*.yuv=38;5;13:*.cgm=38;5;13:*.emf=38;5;13:*.axv=38;5;13:*.anx=38;5;13:*.ogv=38;5;13:*.ogx=38;5;13:*.aac=38;5;45:*.au=38;5;45:*.flac=38;5;45:*.mid=38;5;45:*.midi=38;5;45:*.mka=38;5;45:*.mp3=38;5;45:*.mpc=38;5;45:*.ogg=38;5;45:*.ra=38;5;45:*.wav=38;5;45:*.axa=38;5;45:*.oga=38;5;45:*.spx=38;5;45:*.xspf=38;5;45:
GNOME_TERMINAL_SERVICE=:1.110
SSH_AUTH_SOCK=/run/user/1000/keyring/ssh
SESSION_MANAGER=local/unix:@/tmp/.ICE-unix/8140,unix/unix:/tmp/.ICE-unix/8140
USERNAME=xf
GNOME_SHELL_SESSION_MODE=classic
PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/xf/.local/bin:/home/xf/bin
MAIL=/var/spool/mail/xf
DESKTOP_SESSION=gnome-classic
QT_IM_MODULE=xim
XDG_SESSION_TYPE=x11
PWD=/home/xf
XMODIFIERS=@im=ibus
LANG=zh_CN.UTF-8
GDM_LANG=zh_CN.UTF-8
GDMSESSION=gnome-classic
HISTCONTROL=ignoredups
XDG_SEAT=seat0
HOME=/home/xf
SHLVL=2
GNOME_DESKTOP_SESSION_ID=this-is-deprecated
XDG_SESSION_DESKTOP=gnome-classic
LOGNAME=xf
XDG_DATA_DIRS=/home/xf/.local/share/flatpak/exports/share/:/var/lib/flatpak/exports/share/:/usr/local/share/:/usr/share/
DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-W6Hx6GcXU8,guid=6eea49fbec14c47cd3740c5e5ccbf4ea
LESSOPEN=||/usr/bin/lesspipe.sh %s
WINDOWPATH=1
XDG_RUNTIME_DIR=/run/user/1000
DISPLAY=:0
XDG_CURRENT_DESKTOP=GNOME-Classic:GNOME
COLORTERM=truecolor
XAUTHORITY=/run/gdm/auth-for-xf-6FYINa/database
_=/usr/bin/env

  命令(命令本質就是可執行的腳本)就是前往PATH環境變量下查找是否存在,有的則執行,沒有會報錯

[xf@xuexi ~]$ which pwd
/usr/bin/pwd
[xf@xuexi ~]$ ll /usr/bin/pwd
-rwxr-xr-x. 1 root root 33280 10月 31 2018 /usr/bin/pwd

  2.用戶自定義變量

[xf@xuexi ~]$ VAR2=123
[xf@xuexi ~]$ echo $VAR2
123

  3.位置參數變量:這種變量主要用來向腳本當中傳遞參數或數據,變量名不能自定義,作用是固定的。$0獲取當前shell腳本文件的文件名,$n($1,$2,$3....)獲取第n個參數,n大於9時使用${n}(${10})。

[xf@xuexi ~]$ cat a.sh 
#!/bin/bash
echo "$0"
echo "$1"
echo "$3"
[xf@xuexi ~]$ sh a.sh 1 2 3
a.sh
1
3
[xf@xuexi ~]$ sh /home/xf/a.sh 1 2 3
/home/xf/a.sh
1
3
[xf@xuexi ~]$ sh a.sh 1 3 2
a.sh
1
2

  4.預定義變量:是bash中已經定義好的變量,變量名不能自定義,作用也是固定的

按照變量的作用范圍可以分為2類:

  1.全局變量:是環境變量,其值不隨shell腳本的執行結束而消失

  2.局部變量:shell程序內部定義的,其使用范圍僅限於定義它的程序,包括用戶自定義變量、位置變量和預定義變量。

 (3).刪除變量

[xf@xuexi ~]$ Var=1
[xf@xuexi ~]$ echo $Var
1
[xf@xuexi ~]$ unset Var
[xf@xuexi ~]$ echo $Var
//這里有空行

(4).添加環境變量

  臨時添加PATH環境變量,只能在當前shell下使用

[xf@xuexi ~]$ echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/xf/.local/bin:/home/xf/bin
[xf@xuexi ~]$ PATH=/home/xf:$PATH
[xf@xuexi ~]$ echo $PATH
/home/xf:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/xf/.local/bin:/home/xf/bin
[xf@xuexi ~]$ cat a.sh 
#!/bin/bash
echo "hello world"
[xf@xuexi ~]$ ll a.sh 
-rwxrwxr-x. 1 xf xf 31 5月   3 19:48 a.sh
[xf@xuexi ~]$ cd /  //在任何地方都可以直接運行了,這是把這個文件當成命令使用了
[xf@xuexi /]$ a.sh
hello world

  臨時添加PATH環境變量,但允許任何shell使用,此時需要使用到export,export PATH=$PATH:/home/xf。

  永久添加環境變量需要將變量寫入到配置文件,其中/etc/profile是系統全局變量和登錄系統的一些配置;/etc/bashrc是shell全局自定義配置文件,用於自定義shell;/root/.bashrc用於單獨自定義某個用戶的bash;/root/.bash_profile用戶單獨自定義某個用戶的系統環境。運行順序:/etc/profile-->/etc/bashrc-->~/.bashrc-->~/.bash_profile。運行順序靠后的同名變量會覆蓋運行順序靠前的同名變量。

[root@xuexi ~]# vim /etc/profile
[root@xuexi ~]# tail -1 /etc/profile
Var="hello world"  //添加一個新的變量
[root@xuexi ~]# echo $Var
  //此處需要刷新或重新登錄或. ./etc/profile刷新,否則無法使用
[root@xuexi ~]# source /etc/profile  //使用source刷新環境變量
[root@xuexi ~]# echo $Var
hello world

(5).特殊變量

$#是傳遞到腳本的參數的個數

$*是以一個字符串顯示所有向腳本傳遞的參數

$$是當前進程的進程號PID

$?顯示上一條命令的退出狀態,0表示沒有錯誤,其他都有錯誤

$!是后台運行的最后一個進程的進程號PID


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM