Shell腳本中變量的基本概念和使用方法介紹

變量:用于一個(gè)固定的字符串去表示不固定的內(nèi)容,便于修改。
1.自定義變量
用戶自定義變量是最常用的變量類型;
其特點(diǎn)是變量名和變量值都是有用戶自由定義的。
1.1 變量調(diào)用及注意事項(xiàng)
[root@shell-test ~]# name=kaser [root@shell-test ~]# echo $name kaser
變量名不能以數(shù)字開頭
[root@shell-test ~]# 2aaa=kkkkkk bash: 2aaa=kkkkkk: command not found...
等號(hào)左右兩側(cè)不能有空格
[root@shell-test ~]# ccc = 123 bash: ccc: command not found...
變量值若有空格,必須使用引號(hào)包含
[root@shell-test ~]# bbb=ka ka bash: ka: command not found... [root@shell-test ~]# echo $bbb [root@shell-test ~]# bbb="ka ka" [root@shell-test ~]# echo $bbb ka ka
1.2 重復(fù)定義變量
[root@shell-test ~]# cc=123
[root@shell-test ~]# echo $cc
123
[root@shell-test ~]# cc="$cc"456
[root@shell-test ~]# echo $cc
123456
[root@shell-test ~]# cc=${cc}789
[root@shell-test ~]# echo $cc
123456789
1.3 變量查看set及變量刪除unset
# set [root@shell-test ~]# set | grep cc cc=123456789 ccc='kaser 666' # unset [root@shell-test ~]# unset 變量名
1.4 變量注意事項(xiàng)
- 變量名和等號(hào)之間不能有空格。
- 變量名命名規(guī)則如下:
- 命名只能使用英文字母,數(shù)字和下劃線,首個(gè)字符不能以數(shù)字開頭。
- 中間不能有空格,可以使用下劃線(_)。
- 不能使用標(biāo)點(diǎn)符號(hào)。
- 不能使用bash里的關(guān)鍵字(可用help命令查看保留關(guān)鍵字)。
- 起變量名,請(qǐng)使用五個(gè)字母以上。
1.5 示例:編寫“測(cè)試主機(jī)是否存活的腳本”?
1.5.1 不使用變量
[root@shell-test ~]# vim live_host-1.sh ping -c1 172.25.254.44 &> /dev/null && echo "172.25.254.44 UpUpUp~" || echo "172.25.254.44 DownDownDown~" [root@shell-test ~]# chmod +x live_host.sh [root@shell-test ~]# ./live_host.sh 172.25.254.44 UpUpUp~
1.5.2 使用變量
[root@shell-test ~]# vim live_host-2.sh #!/bin/bash ip=172.25.254.44 ping -c1 $ip &> /dev/null && echo "$ip UpUpUp~" || echo "%ip DownDownDown~" [root@shell-test ~]# chmod +x live_host-2.sh [root@shell-test ~]# ./live_host-2.sh 172.25.254.44 UpUpUp~
1.5.3 變量+交互式
# 交互定義變量 read 從鍵盤讀入變量值 read 變量名
[root@shell-test ~]# vim live_host-3.sh #!/bin/bash read -p "請(qǐng)輸入測(cè)試主機(jī)IP地址:" ip ping -c1 $ip &> /dev/null && echo "$ip UpUpUp~" || echo "$ip DownDownDown~" [root@shell-test ~]# chmod +x live_host-3.sh [root@shell-test ~]# ./live_host-3.sh 請(qǐng)輸入測(cè)試主機(jī)IP地址:172.25.254.44 172.25.254.44 UpUpUp~
2.整數(shù)運(yùn)算
2.1expr
+加,-減,*乘,/除,%取余
[root@shell-test ~]# expr 3 + 6 9 [root@shell-test ~]# num1=3 [root@shell-test ~]# num2=6 [root@shell-test ~]# expr $num1 + $num2 9 [root@shell-test ~]# expr $num1 - $num2 -3 [root@shell-test ~]# expr $num1 \* $num2 18 [root@shell-test ~]# expr $num1 / $num2 0 [root@shell-test ~]# expr $num1 % $num2 3
2.2$(())
[root@shell-test ~]# num1=2 [root@shell-test ~]# num2=4 [root@shell-test ~]# echo $((num1+num2)) 6 [root@shell-test ~]# echo $(($num1+$num2)) 6
2.3$[]
[root@shell-test ~]# echo $[3+2] 5 [root@shell-test ~]# echo $[3*2] 6 [root@shell-test ~]# echo $[3/2] 1 [root@shell-test ~]# echo $[3%2] 1
2.4let
[root@shell-test ~]# let a++;echo $a 1 [root@shell-test ~]# let a++;echo $a 2 [root@shell-test ~]# let a++;echo $a 3 [root@shell-test ~]# let a++;echo $a 4 [root@shell-test ~]# let a++;echo $a 5 [root@shell-test ~]# let a++;echo $a 6 [root@shell-test ~]# let a++;echo $a 7 [root@shell-test ~]# let a++;echo $a 8
3.小數(shù)運(yùn)算
bc:交互運(yùn)算器
[root@shell-test ~]# yum install -y bc [root@shell-test ~]# echo "2+3" | bc 5 [root@shell-test ~]# echo "2*3" | bc 6 [root@shell-test ~]# echo "2%3" | bc 2 [root@shell-test ~]# echo "2/3" | bc 0 [root@shell-test ~]# echo "scale=3;10/3" | bc 3.333 [root@shell-test ~]# echo "scale=8;10/3" | bc 3.33333333
4.環(huán)境變量
自定義變量,只能再當(dāng)前shell生效。其他shell是不生效的。說白了,你的變量只能你用。那如果有些變量,需要所有的用戶都使用用。怎么辦呢?
定義環(huán)境變量
1.直接申明
[root@shell-test ~]# ppp=333 [root@shell-test ~]# echo $ppp 333 [root@shell-test ~]# echo $$ 2139 [root@shell-test ~]# bash [root@shell-test ~]# echo $ppp [root@shell-test ~]# echo $$ 2163 [root@shell-test ~]# export ppp=3 [root@shell-test ~]# echo $ppp 3 [root@shell-test ~]# echo $$ 2139 [root@shell-test ~]# bash [root@shell-test ~]# echo $$ 2186 [root@shell-test ~]# echo $ppp 3
2.轉(zhuǎn)換環(huán)境變量
將自定義變量轉(zhuǎn)換到環(huán)境變量
~/.bash_profile:當(dāng)前用戶/etc/profile:所有用戶
# 直接申明,但是重新連接到ssh則會(huì)發(fā)現(xiàn)我們申明的環(huán)境變量消失了 [root@shell-test ~]# export kkk=123123123 [root@shell-test ~]# echo $kkk 123123123 [root@shell-test ~]# bash [root@shell-test ~]# echo $kkk 123123123 [root@shell-test ~]# bash [root@shell-test ~]# echo $kkk 123123123 [root@shell-test ~]# ssh 172.25.254.44 [root@shell-test ~]# echo $kkk
1.~/.bash_profile
[root@shell-test ~]# echo "export xx=0000" >> .bash_profile [root@shell-test ~]# source .bash_profile [root@shell-test ~]# echo $xx 0000 [root@shell-test ~]# bash [root@shell-test ~]# [root@shell-test ~]# echo $xx 0000 [root@shell-test ~]# useradd kaser [root@shell-test ~]# su - kaser [kaser@shell-test ~]$ echo $xx [kaser@shell-test ~]$
2./etc/profile
[root@shell-test ~]# echo "export ggg=444" >> /etc/profile [root@shell-test ~]# source /etc/profile [root@shell-test ~]# echo $ggg 444 [root@shell-test ~]# bash [root@shell-test ~]# echo $ggg 444 [root@shell-test ~]# su - kaser [kaser@shell-test ~]$ echo $ggg 444
5.預(yù)定義變量
5.1 與參數(shù)相關(guān)的變量
$0 # 當(dāng)前腳本名稱 $1 $2 $3 ... $x # 位置參數(shù) $# # 參數(shù)總數(shù) $* $@ # 所有位置參數(shù)
5.2 與執(zhí)行狀態(tài)相關(guān)的變量
$? # 上個(gè)命令退出的狀態(tài)碼 $$ # 當(dāng)前Shell進(jìn)程ID(PID) $! # 最后一個(gè)后臺(tái)運(yùn)行進(jìn)程的進(jìn)程ID(PID)
5.3 與環(huán)境及輸入相關(guān)的變量
$- # 當(dāng)前Shell的選項(xiàng)標(biāo)志 $_ # 上一個(gè)命令的最后一個(gè)參數(shù) $IFS # 內(nèi)部字段分隔符
5.4 示例
[root@shell-test ~]# vim test-2.sh #!/bin/bash echo "腳本名稱: $0" echo "第一個(gè)參數(shù): $1" echo "第二個(gè)參數(shù): $2" echo "參數(shù)總數(shù): $#" echo "所有參數(shù)(*): $*" echo "所有參數(shù)(@): $@" # 模擬一個(gè)命令并檢查返回值 ls -l /mnt echo "上一個(gè)命令的退出狀態(tài): $?" ls -l /non_existent_directory echo "上一個(gè)命令的退出狀態(tài): $?" echo "當(dāng)前進(jìn)程ID: $$" # 后臺(tái)運(yùn)行示例 sleep 100 & echo "后臺(tái)進(jìn)程ID: $!" echo "上一個(gè)命令的最后一個(gè)參數(shù): $_" # 注意:在這里 $_ 將是 "$!" 的值,因?yàn)槟鞘巧弦粋€(gè)命令(echo)的最后一個(gè)參數(shù) [root@shell-test ~]# chmod +x test-2.sh [root@shell-test ~]# ./test-2.sh 3 5 腳本名稱: ./test-2.sh 第一個(gè)參數(shù): 3 第二個(gè)參數(shù): 5 參數(shù)總數(shù): 2 所有參數(shù)(*): 3 5 所有參數(shù)(@): 3 5 total 0 drwxr-xr-x. 2 root root 6 Nov 4 10:34 hgfs 上一個(gè)命令的退出狀態(tài): 0 ls: cannot access '/non_existent_directory': No such file or directory 上一個(gè)命令的退出狀態(tài): 2 當(dāng)前進(jìn)程ID: 4099 后臺(tái)進(jìn)程ID: 4102 上一個(gè)命令的最后一個(gè)參數(shù): 后臺(tái)進(jìn)程ID: 4102
5.5 測(cè)試
5.5.1 編寫自動(dòng)創(chuàng)建用戶并設(shè)置初始密碼的簡易腳本
[root@shell-test ~]# vim new_user_passwd.sh #!/bin/bash read -p "新建用戶名(name)=" name read -sp "新建密碼(passwd)=" passwd echo useradd $name echo "$passwd" | passwd --stdin $name > /dev/null echo "$name已經(jīng)被創(chuàng)建,密碼為$passwd,為賬號(hào)安全,請(qǐng)勿外傳!" [root@shell-test ~]# chmod +x new_user_passwd.sh [root@shell-test ~]# ./new_user_passwd.sh 新建用戶名(name)=kkk 新建密碼(passwd)= kkk已經(jīng)被創(chuàng)建,密碼為123,為賬號(hào)安全,請(qǐng)勿外傳!
5.5.2 編寫自動(dòng)配置本地軟件源的簡易腳本
[root@shell-test ~]# vim auto_mount_yum.sh #!/bin/bash echo "這是一個(gè)自動(dòng)配置本地軟件倉庫的腳本(開機(jī)自動(dòng)掛載)!" echo "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$" echo echo mkdir /local echo "已創(chuàng)建/local,將/dev/sr0掛載至此。" mount /dev/sr0 /local mount /dev/sr0 /local >> /etc/rc.d/rc.local chmod +x /etc/rc.d/rc.local echo "已完成開機(jī)自動(dòng)掛載!" echo cat <<EOF > /etc/yum.repos.d/local.repo [AppStream] name=AppStream baseurl=file:///local/AppStream [BaseOS] name=BaseOS baseurl=file:///local/BaseOS EOF yum clean all && yum makecache echo "元數(shù)據(jù)已緩存至本地,開始使用吧!"
以上就是Shell腳本中變量的基本概念和使用方法介紹的詳細(xì)內(nèi)容,更多關(guān)于Shell腳本變量使用的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
使用Shell腳本如何啟動(dòng)/停止Java的jar程序
這篇文章主要介紹了使用Shell腳本如何啟動(dòng)/停止Java的jar程序,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
Shell中printf和test命令的實(shí)際應(yīng)用詳解
本文主要介紹了Shell中printf和test命令的實(shí)際應(yīng)用詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-09-09
在Shell腳本中調(diào)用另一個(gè)腳本的三種方式講解
今天小編就為大家分享一篇關(guān)于在Shell腳本中調(diào)用另一個(gè)腳本的三種方式講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-04-04
linux中nohup和后臺(tái)運(yùn)行進(jìn)程查看及終止
今天給大家介紹linux中nohup和后臺(tái)運(yùn)行進(jìn)程查看及終止的操作命令,大家都知道nohup用于不掛斷地運(yùn)行命令,語法也很簡單,需要的朋友可以參考下本文吧2021-06-06
shell 腳本中獲取命令的輸出的實(shí)現(xiàn)示例
本文主要介紹了shell 腳本中獲取命令的輸出的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02

