Linux Shell脚本编程基础(11)
實(shí)際上Shell是一個命令解釋器,它解釋由用戶輸入的命令并且把它們送到內(nèi)核,不僅如此,Shell有自己的編程語言用于對命令的編輯,它允許用戶編寫由shell命令組成的程序.Shel編程語言具有普通編程語言的很多特點(diǎn),比如它也有循環(huán)結(jié)構(gòu)和分支控制結(jié)構(gòu)等,用這種編程語言編寫的Shell程序與其他應(yīng)用程序具有同樣的效果,下面我們會介紹Shell-Script的編寫.
Echo 標(biāo)準(zhǔn)輸出
echo命令用于在shell中打印shell變量的值,或者直接輸出指定的字符串,linux的echo命令,在shell編程中極為常用,在終端下打印變量value的時候也是常常用到的,因此有必要了解下echo的用法echo命令的功能是在顯示器上顯示一段文字,一般起到一個提示的作用.
[root@localhost ~]# echo --help語法格式:[ echo [選項(xiàng)] [輸出內(nèi)容] ]-e #支持反斜線控制的字符轉(zhuǎn)換-n #取消輸出后行尾的換行符號 ----------------------------------------------------------------------------------------- 控制字符:\\ #輸出\本身\a #輸出警告音 \b #退格鍵,也就是向左刪除鍵 \c #取消輸出行末的換行符,和"-n"選項(xiàng)一致 \e #ESCAPE鍵 \f #換頁符 \n #換行符 \r #回車鍵 \t #制表符,也就是Tab鍵 \v #垂直制表符 \0nnn #按照八進(jìn)制ASCII碼輸出字符,其中0為數(shù)字零,nnn是三位八進(jìn)制數(shù)\xhh #按照十六進(jìn)制ASCII碼表輸出字符,其中hh是兩位十六進(jìn)制數(shù) ----------------------------------------------------------------------------------------- 特殊格式:\\ #輸出\本身"\e[1" #代表顏色輸入開始"\e[0m" #代表顏色輸入結(jié)束\e[0m #關(guān)閉所有屬性\e[1m #設(shè)置高亮度\e[4m #下劃線 \e[5m #閃爍\e[7m #反顯 \e[8m #消隱\e[nA #光標(biāo)上移n行 \e[nB #光標(biāo)下移n行 \e[nC #光標(biāo)右移n行 \e[nD #光標(biāo)左移n行 \e[y;xH #設(shè)置光標(biāo)位置 \e[2J #清屏 \e[K #清除從光標(biāo)到行尾的內(nèi)容 \e[s #保存光標(biāo)位置 \e[u #恢復(fù)光標(biāo)位置 \e[25l #隱藏光標(biāo) \e[25h #顯示光標(biāo) ----------------------------------------------------------------------------------------- 文字顏色和底紋顏色:文字顏色代碼:30=黑色,31=紅色,32=綠色,33=黃色,34=藍(lán)色,35=洋紅,36=青色,37=白色,39=結(jié)束 底紋顏色代碼:40=黑色,41=紅色,42=綠色,43=黃色,44=藍(lán)色,45=洋紅,46=青色,47=白色,49=結(jié)束 -----------------------------------------------------------------------------------------實(shí)例1: 輸出一個紅字,并且黃底的"hello world"
[root@localhost ~]# echo -e "\e[31;43m hello world \e[0m"hello world實(shí)例2: 輸出\a本身
[root@localhost ~]# echo -e "\\\a"\aRead 標(biāo)準(zhǔn)輸入
read命令從鍵盤讀取變量的值,通常用在shell腳本中與用戶進(jìn)行交互的場合,該命令可以一次讀取多個變量的值,變量和輸入的值都需要使用空格隔開.在read命令后面,如果沒有指定變量名,讀取的數(shù)據(jù)將被自動賦值給特定的變量REPLY.
[root@localhost ~]# read --help語法格式:[ read [選項(xiàng)] [輸出內(nèi)容] ]-p #"提示信息",指定讀取值時的提示符-t #指定讀取值時等待的時間(秒),read等待的秒數(shù)-n #指定最多能接收的字符數(shù)(達(dá)到即執(zhí)行)-s #隱藏輸入信息實(shí)例1: 通過Read命令讀取一個值
[root@localhost ~]# read temp hello Lyshark[root@localhost ~]# echo $temp hello Lyshark實(shí)例2: 通過read命令讀取,并輸出一段提示信息,且10秒等待輸入時間
[root@localhost ~]# read -p "please input name" -t 10 temp wangrui[root@localhost ~]# echo $temp wangrui小腳本:
#!/bin/bashread -p "請輸入你的名字:" name echo $nameread -t 30 -p "請?jiān)?0秒內(nèi)完成輸入,輸入你的年齡:" age echo $ageread -s -t 30 "隱藏輸入您的性別(m/w):" sex echo $sexBash 變量
變量是計(jì)算機(jī)語言中能儲存計(jì)算結(jié)果或能表示值抽象概念,變量可以通過變量名訪問,在指令式語言中,變量通常是可變的.
變量是 bash 環(huán)境中非常重要的一個東西,我們知道 Linux 是多人多任務(wù)的環(huán)境,每個人登陸系統(tǒng)都能取得一個 bash 每個人都能夠使用 bash 下達(dá) mail 這個命令來收受『自己』的郵件,問題是 bash 是如何得知你的郵件信箱是哪個文件?這就需要『變量』的幫助啦,所以你說變量重不重要呢? 下面我們將介紹重要的環(huán)境變量、變量的取用與配置等數(shù)據(jù)。
關(guān)于變量名定義
● 變量名可以自定義,如果不指定變量名,會把輸入保存入默認(rèn)變量REPLY.
● 如果只提供了一個變量名,則整個輸入行賦予該變量.
● 如果提供了一個以上的變量名,則輸入行分為若干字,一個接一個地賦予各個變量,而命令行上的最后一個變量取得剩余的所有值.
◆變量定義的規(guī)范◆
規(guī)范1: 變量名稱可以由字母、數(shù)字和下劃線組成,但是不能以數(shù)字開頭,變量中間不能有空格
[root@localhost ~]# name=lyshark [root@localhost ~]# echo $name lyshark[root@localhost ~]# 1name=lyshark -bash: 1name=lyshark: command not found規(guī)范2: 在bash中變量的默認(rèn)類型都是字符串型,如果要進(jìn)行數(shù)值運(yùn)算,則必修指定變量類型為數(shù)值型
[root@localhost ~]# x=10 [root@localhost ~]# y=20 [root@localhost ~]# sum=$x+$y[root@localhost ~]# echo $sum 10+20規(guī)范3: 變量用等號連接值,等號左右兩側(cè)不能有空格
[root@localhost ~]# name=lyshark [root@localhost ~]# echo $name lyshark[root@localhost ~]# name =lyshark -bash: name: command not found[root@localhost ~]# name= lyshark -bash: lyshark: command not found規(guī)范4: 變量的值如果有空格,需要使用單引號或雙引號包括
1.雙引號:下面輸出一段 "hello world"
[root@localhost ~]# temp="hello world"[root@localhost ~]# echo $temp hello world2.\脫意字符:輸出$name本身
[root@localhost ~]# name=lyshark[root@localhost ~]# echo "$name" lyshark[root@localhost ~]# echo "\$name" $name3.反引號與雙引號:輸出結(jié)果相同
[root@localhost ~]# echo `date` Sun Sep 23 23:51:38 EDT 2018[root@localhost ~]# echo "`date`" Sun Sep 23 23:51:45 EDT 2018[root@localhost ~]# echo "$(date)" Sun Sep 23 23:51:52 EDT 2018[root@localhost ~]# echo "\$(date)" $(date)4.單引號括起來的都是普通字符
[root@localhost ~]# echo '`date`' `date` [root@localhost ~]# echo '$name' $name規(guī)范5: 變量疊加:如果需要增加變量的值,那么可以進(jìn)行變量值的疊加
1.變量需要用雙引號包含 "$變量名" 或用 ${變量名} 包含變量名,才可以實(shí)現(xiàn)疊加.
[root@localhost ~]# name=lyshark [root@localhost ~]# echo $name lyshark[root@localhost ~]# temp="$name is" [root@localhost ~]# echo $temp lyshark is[root@localhost ~]# end="${temp} hack" [root@localhost ~]# echo $end lyshark is hack2.將命令結(jié)果賦值給一個變量,則需要使用反引號或$()包含命令.
[root@localhost ~]# ntp=`date` [root@localhost ~]# echo $ntp Mon Sep 24 00:01:50 EDT 2018[root@localhost ~]# temp=$(pwd) [root@localhost ~]# echo $temp /root◆用戶自定義變量◆
用戶自定義變量是最常見的變量,由用戶自由定義變量名和變量的值.
顯示變量:set 顯示系統(tǒng)中所有的變量(自定義變量,與系統(tǒng)變量等)
[root@localhost ~]# set BASH=/bin/bash BASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote... BASH_ALIASES=() BASH_ARGC=() BASH_ARGV=() BASH_CMDS=() ....變量調(diào)用:使用 $調(diào)用變量
[root@localhost ~]# name=lyshark[root@localhost ~]# echo $name ....省略....變量刪除:刪除一個正在使用的變量
[root@localhost ~]# name=lyshark [root@localhost ~]# echo $name lyshark[root@localhost ~]# unset name [root@localhost ~]# echo $nameset -u:當(dāng)執(zhí)行時使用到未定義過的變量,則顯示錯誤信息
[root@localhost ~]# echo $age[root@localhost ~]# set -u[root@localhost ~]# echo $age -bash: age: unbound variableset -x:調(diào)用命令執(zhí)行前,會先把命令輸出一次
[root@localhost ~]# set -x[root@localhost ~]# ls -l / + ls --color=auto -l / total 16 lrwxrwxrwx. 1 root root 7 Sep 18 09:05 bin -> usr/bin dr-xr-xr-x. 5 root root 4096 Sep 18 09:12 boot ....省略....◆系統(tǒng)的環(huán)境變量◆
環(huán)境變量可以幫我們達(dá)到很多功能,包括家目錄的變換、提示字符的顯示、運(yùn)行文件搜尋的路徑等,那么既然環(huán)境變量有那么多的功能,我們可以利用兩個命令來查閱分別是 env 與 export ,這種變量中主要保存的是和系統(tǒng)操作環(huán)境相關(guān)的數(shù)據(jù),比如當(dāng)前登錄用戶,用戶的家目錄,命令的提示符等.環(huán)境變量的變量名可以自由定義,但是一般對系統(tǒng)起作用的環(huán)境變量的變量名是系統(tǒng)預(yù)先設(shè)定好的.
[環(huán)境變量]:環(huán)境變量的設(shè)置
[root@localhost ~]# export AGE=22 [root@localhost ~]# echo $AGE 22?環(huán)境變量的查詢與刪除
解釋:env和set的區(qū)別:set命令可以查看所有變量,而env命令只能查看環(huán)境變量。
[env變量]:實(shí)現(xiàn)所有環(huán)境變量查詢
解釋:env命令可以查詢到所有的環(huán)境變量,可是還有一些變量雖然不是環(huán)境變量,卻是和Bash操作接口相關(guān)的變量,這些變量也對我們的Bash操作終端起到了重要的作用。這些變量就只能用set命令來查看了。
[PATH變量]:系統(tǒng)查找命令的路徑
解釋:PATH變量的值是用“:”分割的路徑,這些路徑就是系統(tǒng)查找命令的路徑。也就是說當(dāng)我們輸入了一個程序名,如果沒有寫入路徑,系統(tǒng)就會到PATH變量定義的路徑中去尋找,是否有可以執(zhí)行的程序。如果找到則執(zhí)行,否則會報(bào)“命令沒有發(fā)現(xiàn)”的錯誤。
[PS1變量]:命令提示符設(shè)置
解釋:PS1是用來定義命令行的提示符的,可以安裝我們自己的需求來定義自己 喜歡的提示符。PS1可以支持以下這些選項(xiàng):
想要使用這些必須先知道定義的規(guī)范,來看下官方的PS1
[root@localhost ~]# echo $PS1[\u@\h \W]\$定義ps1的值時需要注意單引號,否則不生效
[root@localhost ~]# PS1='[\u@\t \w]$' [root@00:49:09 ~]$ [root@00:49:10 ~]$ PS1='[\u@\h \W]\$' [root@localhost ~]#LANG 語系變量
LANG定義的是Linux 的主語系環(huán)境變量:
[root@localhost ~]#echo $LANG en_US.UTF-8這是因?yàn)槲覀僉inux安裝時,選擇的是英文安裝,所以默認(rèn)的主語系變量是“en_US.UTF-8”。那么Linux中到底支持多少語系呢?我們可以使用以下命令查詢:
[root@localhost ~]#locale -a |more aa_DJ aa_DJ.iso88591 aa_DJ.utf8 aa_ER aa_ER@saaho aa_ER.utf8 aa_ER.utf8@saaho aa_ET aa_ET.utf8 ....省略....[root@localhost ~]#locale -a |wc -l 789我們當(dāng)前是什么語系可以用locale 直接查詢:
[root@localhost ~]#locale LANG=en_US.UTF-8 LC_CTYPE="en_US.UTF-8" LC_NUMERIC="en_US.UTF-8" LC_TIME="en_US.UTF-8" LC_COLLATE="en_US.UTF-8" ....省略....這是當(dāng)前系統(tǒng)語系,又是默認(rèn)語系,有沒有快暈倒的感覺。解釋下吧,我們可以這樣理解,默認(rèn)語系是下次重啟之后系統(tǒng)所使用的語系,而當(dāng)前系統(tǒng)語系是當(dāng)前系統(tǒng)使用的語系。如果系統(tǒng)重啟,會從默認(rèn)語系配置文件/etc/sysconfig/i18n中讀出語系,然后賦予變量LANG讓這個語系生效。也就是說,LANG定義的語系只對當(dāng)前系統(tǒng)生效,要想永久生效就要修改/etc/sysconfig/i18n文件了。
說到這里,我們需要解釋下Linux中文支持的問題。是不是我們只要定義了語系為中文語系,如zh_CN.UTF-8就可以正確顯示中文了呢?這要分情況,如果我們是在圖形界面中,或者是使用遠(yuǎn)程連接工具(如SecureCRT),只要正確設(shè)置了語系,那么是可以正確顯示中文的。當(dāng)然遠(yuǎn)程連接工具也要配置正確的語系環(huán)境,具體配置方式可以參考Linux系統(tǒng)安裝章節(jié)。
那么如果是純字符界面(本地終端tty1-tty6)是不能顯示中文的,因?yàn)長inux的純字符界面時不能顯示中文這么復(fù)雜的編碼的。如果我們非要在純字符界面顯示中文,那么只能安裝中文插件,如zhcon等。
◆位置參數(shù)變量◆
解釋:這種變量主要是用來向腳本當(dāng)中傳遞參數(shù)或數(shù)據(jù)的,變量名不能自定義,變量作用是固定的.
| $n | n代表數(shù)字,$0代表命令本身,$1-$9代表第一到第九個參數(shù),十以上參數(shù)需要用大括號包含,如:${10}. |
| $* | 這個變量代表命令行中的所有參數(shù),$*把所有參數(shù)看成一個整體. |
| $@ | 這個變量也代表命令行中所有參數(shù),不過$@把每個參數(shù)區(qū)分對待. |
| $# | 這個變量代表命令行中所有參數(shù)的個數(shù). |
◆系統(tǒng)預(yù)定義變量◆
解釋:預(yù)定義變量是Bash中已經(jīng)定義好的變量,變量名不能自定義,變量作用也是固定的.
| $? | 最后一次執(zhí)行命令的返回狀態(tài),正確返回0,錯誤返回非0 |
| $$ | 當(dāng)前進(jìn)程的進(jìn)程號(PID) |
| $! | 后臺運(yùn)行的最后一個進(jìn)程的進(jìn)程號(PID) |
實(shí)例1: $? 判斷上一條命令執(zhí)行狀態(tài),成功返回0,失敗返回非0
[root@localhost ~]# ls -l total 12 -rw-r--r-- 1 root root 112 Sep 24 01:25 a.sh -rw-r--r-- 1 root root 30 Sep 24 01:26 b.sh -rw-r--r-- 1 root root 165 Sep 24 01:29 c.sh[root@localhost ~]# echo $? ←上條執(zhí)行成功返0 0[root@localhost ~]# lss -bash: lss: command not found[root@localhost ~]# echo $? ←上條執(zhí)行失敗返非0 127實(shí)例2: $$ 返回自身進(jìn)程號
[root@localhost ~]# cat d.sh #!/bin/bashecho "本腳本的進(jìn)程號是: $$"[root@localhost ~]# bash d.sh 本腳本的進(jìn)程號是: 1540實(shí)例3: $! 返回最后一個后臺執(zhí)行的命令進(jìn)程ID號
[root@localhost ~]# cat e.sh #!/bin/bashfind / -name "*.log" &echo "最后一個后臺執(zhí)行的命令進(jìn)程是: $!"[root@localhost ~]# bash e.sh 最后一個后臺執(zhí)行的命令進(jìn)程是: 1546Bash 數(shù)值與運(yùn)算符
declare命令用于聲明和顯示已存在的shell變量,當(dāng)不提供變量名參數(shù)時顯示所有shell變量,declare命令若不帶任何參數(shù)選項(xiàng),則會顯示所有shell變量及其值,declare的功能與typeset命令的功能是相同的.
[root@localhost ~]# declare --help[語法格式]: declare [選項(xiàng)] [變量名]- #給變量設(shè)定類型+ #取消變量的類型-a #將變量聲明成數(shù)組-i #將變量聲明成整數(shù)型-r #將變量聲明成只讀-x #將變量聲明成環(huán)境變量-p #顯示指定變量的類型及內(nèi)容聲明整數(shù)型: 聲明整數(shù)型并使用
[root@localhost ~]# declare -i temp #此處我們聲明了temp變量為整數(shù)型[root@localhost ~]# temp=100 #賦值整形數(shù)據(jù)可打印 [root@localhost ~]# echo $temp 100[root@localhost ~]# temp=a #賦值一個字符打印自動歸0 [root@localhost ~]# echo $temp 0[root@localhost ~]# unset temp #使用結(jié)束,撤銷變量聲明定義數(shù)組: 聲明數(shù)組并定義元素,打印
[root@localhost ~]# declare -a name #聲明name為數(shù)組[root@localhost ~]# name[0]="hello world" #給數(shù)組name[0]賦值 [root@localhost ~]# name[1]="hello lyshark" #給數(shù)組name[1]賦值[root@localhost ~]# echo $name #默認(rèn)打印name[0],因?yàn)橄聵?biāo)從0開始 hello world[root@localhost ~]# name[2]="hello myblog" #給數(shù)組name[2]賦值[root@localhost ~]# echo "${name[*]}" #打印數(shù)組全部元素hello world hello lyshark hello myblog[root@localhost ~]# echo ${#name[*]} #統(tǒng)計(jì)數(shù)組元素個數(shù) 3 [root@localhost ~]# echo ${#name[@]} #統(tǒng)計(jì)數(shù)組元素個數(shù) 3[root@localhost ~]# declare -p name #打印數(shù)組元素declare -a name='([0]="hello world" [1]="hello lyshark" [2]="hello myblog")'[root@localhost ~]# unset name #使用結(jié)束,撤銷數(shù)組聲明定義數(shù)組: 聲明數(shù)組,并在聲明時定義元素內(nèi)容
[root@localhost ~]# declare -a num=(1 2 3 4 5) #聲明num為數(shù)組,并在聲明是賦值[root@localhost ~]# echo ${#num[*]} #正確,一共有5個元素 5[root@localhost ~]# declare -p num #分別打印數(shù)組中的元素declare -a num='([0]="1" [1]="2" [2]="3" [3]="4" [4]="5")' [root@localhost ~]# unset num #使用結(jié)束,撤銷數(shù)組定義初始化數(shù)組: 數(shù)組定義的多種方法(定義并初始化)
---------------------------------------------------------------------------------------------------- [方法1] [root@localhost ~]# declare -a array_name=(Jerry Alice David LyShark) #通過命令行一部到位 [root@localhost ~]# declare -p array_name #打印查看結(jié)果 declare -a array_name='([0]="Jerry" [1]="Alice" [2]="David" [3]="LyShark")' ---------------------------------------------------------------------------------------------------- [方法2] [root@localhost ~]# declare -a array_name #先聲明array_name數(shù)組 [root@localhost ~]# array_name=(Jerry Alice David LyShark) #緊接著打印 [root@localhost ~]# declare -p array_name declare -a array_name='([0]="Jerry" [1]="Alice" [2]="David" [3]="LyShark")' ---------------------------------------------------------------------------------------------------- [方法3] [root@localhost ~]# string="Jerry Alice Daid LyShark" #聲明一個字符串 [root@localhost ~]# array_name=($string) #直接轉(zhuǎn)換成數(shù)組 [root@localhost ~]# declare -p array_name declare -a array_name='([0]="Jerry" [1]="Alice" [2]="Daid" [3]="LyShark")' ---------------------------------------------------------------------------------------------------- [方法4] [root@localhost ~]# declare -a array_name #聲明一個字符串 [root@localhost ~]# array_name=([0]="LyShark" [1]="Daid" [2]="Alice" [3]="Jerry") #直接轉(zhuǎn)換成數(shù)組[root@localhost ~]# echo ${array_name[@]} #查詢數(shù)組元素 LyShark Daid Alice Jerry[root@localhost ~]# declare -p array_name #命令行查詢 declare -a array_name='([0]="LyShark" [1]="Daid" [2]="Alice" [3]="Jerry")'[root@localhost ~]# unset array_name #使用結(jié)束,撤銷數(shù)組 ----------------------------------------------------------------------------------------------------求數(shù)組長度: 求數(shù)組長度,和單個數(shù)組元素長度.
[root@localhost ~]# declare -a array_name=(Jerry Alice David LyShark) #聲明測試數(shù)組 [root@localhost ~]# echo ${array_name[*]} #打印全部數(shù)組元素 Jerry Alice David LyShark[root@localhost ~]# echo ${#array_name[*]} #顯示全部數(shù)組數(shù) 4 [root@localhost ~]# echo ${#array_name[@]} #顯示全部數(shù)組數(shù) 4[root@localhost ~]# echo ${#array_name[0]} #顯示name[0]字符個數(shù) 5 [root@localhost ~]# echo ${#array_name[3]} #顯示name[3]字符個數(shù) 7[root@localhost ~]# unset array_name #使用結(jié)束,撤銷數(shù)組聲明實(shí)現(xiàn)算數(shù): 通過聲明實(shí)現(xiàn),整數(shù)計(jì)算
[root@localhost ~]# x=10 [root@localhost ~]# y=20 [root@localhost ~]# [root@localhost ~]# declare -i temp=$x+$y [root@localhost ~]# [root@localhost ~]# echo $temp 30聲明環(huán)境變量: 通過declare聲明環(huán)境變量,和export是同樣的效果
[root@localhost ~]# declare -x NAMES="LyShark" [root@localhost ~]# env |grep NAMES NAMES=LyShark[root@localhost ~]# unset NAMES設(shè)置只讀變量: 設(shè)置只讀變量,只能讀取變量,無法改變其數(shù)值
[root@localhost ~]# declare -r test="hello world" [root@localhost ~]# echo $test hello world[root@localhost ~]# test=1234 #這里由于設(shè)置了只讀屬性,所以無法修改 -bash: test: readonly variableexpr 或 let 數(shù)值運(yùn)算
expr命令是一款表達(dá)式計(jì)算工具,使用它完成表達(dá)式的求值操作.let命令是bash中用于計(jì)算的工具,提供常用運(yùn)算符還提供了方冪運(yùn)算符,在變量的房屋計(jì)算中不需要加上$來表示變量,如果表達(dá)式的值是非0,那么返回的狀態(tài)值是0.否則,返回的狀態(tài)值是1.
expr加法乘法運(yùn)算: 使用expr完成一次加法和乘法運(yùn)算,(需要注意的是,運(yùn)算符兩邊必須要有空格,否則不會運(yùn)算)
[root@localhost ~]# declare -i x=10 [root@localhost ~]# declare -i y=20[root@localhost ~]# temp=$(expr $x + $y ) [root@localhost ~]# echo $temp 30[root@localhost ~]# temp=$(expr $x * $y ) [root@localhost ~]# echo $temp 200let加法乘法運(yùn)算: 使用let完成一次加法與乘法運(yùn)算,(此處并沒有嚴(yán)格規(guī)定運(yùn)算符兩邊的距離)
[root@localhost ~]# declare -i x=100 [root@localhost ~]# declare -i y=200[root@localhost ~]# let temp=$x+$y [root@localhost ~]# echo $temp 300[root@localhost ~]# let temp=$x*$y [root@localhost ~]# echo $temp 20000let ++ --: let實(shí)現(xiàn)數(shù)值每次遞增或遞減1,類似C語言中的 x++
[root@localhost ~]# declare -i num=1[root@localhost ~]# let num++ [root@localhost ~]# echo $num 2 [root@localhost ~]# let num++ [root@localhost ~]# echo $num 3 [root@localhost ~]# let num-- [root@localhost ~]# echo $num 2[root@localhost ~]# let --num [root@localhost ~]# echo $num 1let x+=y: let數(shù)值每次遞增或遞減x,類似C語言中的 x+=y
[root@localhost ~]# declare -i num=1[root@localhost ~]# let num+=1 [root@localhost ~]# echo $num 2 [root@localhost ~]# let num-=1 [root@localhost ~]# echo $num 1[root@localhost ~]# let num+=10 [root@localhost ~]# echo $num 11特殊格式運(yùn)算: 使用"$((運(yùn)算式))" 或 "$[運(yùn)算式]" 格式進(jìn)行算數(shù)運(yùn)算
[root@localhost ~]# declare -i x=100 [root@localhost ~]# declare -i y=150[root@localhost ~]# temp=$(( $x+$y )) [root@localhost ~]# echo $temp 250[root@localhost ~]# temp=$[ $x*$y ] [root@localhost ~]# echo $temp 15000Shell 運(yùn)算符優(yōu)先級
運(yùn)算符的優(yōu)先級,就是當(dāng)有多個運(yùn)算符同時存在時,誰先進(jìn)行數(shù)值計(jì)算,但是有時也是有特殊情況,下面分別解釋一下吧.
按照表格的優(yōu)先級是乘除優(yōu)先于加減,但是由于加減被()調(diào)用所以,括號的優(yōu)先級高于乘除.
[root@localhost ~]# declare -i temp[root@localhost ~]# temp=$(( (10+20)*2/4 )) [root@localhost ~]# echo $temp 15取模運(yùn)算和取余運(yùn)算絕大部分是重疊的,但是一個是計(jì)算機(jī)術(shù)語,一個是數(shù)學(xué)概念,區(qū)別在于取模運(yùn)算對負(fù)數(shù)處理不太一樣.
[root@localhost ~]# declare -i temp [root@localhost ~]# [root@localhost ~]# temp=$(( 14%3 )) [root@localhost ~]# echo $temp 2 [root@localhost ~]# temp=$(( -14%3 )) [root@localhost ~]# echo $temp -2 [root@localhost ~]# temp=$(( -14%-3 )) [root@localhost ~]# echo $temp -2 [root@localhost ~]# temp=$(( 14%-3 )) [root@localhost ~]# echo $temp 2 [root@localhost ~]# unset temp邏輯與,只有兩邊同時為真,才會返回真.
[root@localhost ~]# declare -i temp [root@localhost ~]# [root@localhost ~]# temp=$(( 0 && 1 )) [root@localhost ~]# echo $temp 0 [root@localhost ~]# [root@localhost ~]# temp=$(( 1 && 1 )) [root@localhost ~]# echo $temp 1轉(zhuǎn)載于:https://www.cnblogs.com/LyShark/p/10221808.html
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的Linux Shell脚本编程基础(11)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 芒果千层多少钱一个?
- 下一篇: asp.net core在linux进行