這篇文章將為大家詳細(xì)講解有關(guān)shell基礎(chǔ)語(yǔ)法的示例分析,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
創(chuàng)新互聯(lián)公司主要從事成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)承留,十載網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來(lái)電咨詢建站服務(wù):18982081108不論前端還是后端,再學(xué)會(huì)Linux的基礎(chǔ)上,還應(yīng)該學(xué)會(huì)寫一些簡(jiǎn)單的Shell。不止是工作,日常中想做一些東西,如果手動(dòng)做就很累人也費(fèi)時(shí)間,如果你會(huì)用Shell腳本處理就很簡(jiǎn)單了,本文普及的shell的一些基礎(chǔ)知識(shí)。后面還會(huì)持續(xù)更新。
變量只能由大小寫字母,數(shù)字和下劃線組成。
變量名稱不能以數(shù)字開(kāi)頭。
變量可以存儲(chǔ)數(shù)字類型或者字符串類型。
變量賦值等號(hào)兩邊不能有空格。
字符串的變量可以用單引號(hào)或者雙引號(hào)括起來(lái)。
定義變量:
? ~ name="xiaoka" ? ~ age=2
無(wú)效的定義
[
root@iz2ze0ajic0vbv28hcdctpz hello]# 1212=sfds -bash: 1212=sfds: 未找到命令 [root@iz2ze0ajic0vbv28hcdctpz hello]# ?aasd=hehe -bash: ?aasd=hehe: 未找到命令
變量的調(diào)用使用$符號(hào)或者$符號(hào)加上花括號(hào)。一般來(lái)講使用花括號(hào)的用法。
舉例說(shuō)明:
[root@iz2ze0ajic0vbv28hcdctpz hello]# apple=hongfushi [root@iz2ze0ajic0vbv28hcdctpz hello]# echo $applepen [root@iz2ze0ajic0vbv28hcdctpz hello]# echo ${apple}pen hongfushipen
如果不加花括號(hào),就會(huì)讀成applepen為一個(gè)變量,因此解析產(chǎn)生了歧義。
環(huán)境變量:保存操作系統(tǒng)運(yùn)行時(shí)使用的參數(shù)。
位置變量:傳遞腳本參數(shù)時(shí)使用。
預(yù)定義變量:類似于環(huán)境變量,不同是它是不能重定義的。
自定義變量:由用戶自定義,可用于用戶編寫的腳本。
自定義變量:
定義變量database:
[root@iz2ze0ajic0vbv28hcdctpz hello]# database=mysql [root@iz2ze0ajic0vbv28hcdctpz hello]# echo $database mysql [root@iz2ze0ajic0vbv28hcdctpz hello]# echo ${database} mysql
環(huán)境變量:查看全局環(huán)境變量:
[root@iz2ze0ajic0vbv28hcdctpz ~]# printenv XDG_SESSION_ID=2044 HOSTNAME=iz2ze0ajic0vbv28hcdctpz TERM=xterm-256color SHELL=/bin/bash HISTSIZE=1000 SSH_CLIENT=113.44.42.209 56074 22 SSH_TTY=/dev/pts/1 USER=root 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: MAVEN_HOME=/usr/local/apache-maven-3.6.0 MAIL=/var/spool/mail/root PATH=/usr/local/apache-maven-3.6.0/bin:/usr/local/jdk1.8.0_191/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin PWD=/root JAVA_HOME=/usr/local/jdk1.8.0_191 LANG=zh_CN.UTF-8 HISTCONTROL=ignoredups SHLVL=1 HOME=/root LOGNAME=root CLASSPATH=.:/lib/dt.jar:/lib/tools.jar SSH_CONNECTION=113.44.42.209 56074 172.17.187.244 22 LC_CTYPE=zh_CN.UTF-8 LESSOPEN=||/usr/bin/lesspipe.sh %s XDG_RUNTIME_DIR=/run/user/0 _=/usr/bin/printenv
定義一個(gè)環(huán)境變量
[root@iz2ze0ajic0vbv28hcdctpz ~]# export kaka="kaka" [root@iz2ze0ajic0vbv28hcdctpz ~]# env |grep kaka kaka=kaka
刪除環(huán)境變量
[root@iz2ze0ajic0vbv28hcdctpz ~]# unset kaka [root@iz2ze0ajic0vbv28hcdctpz ~]# env |grep kaka
w如果長(zhǎng)期使用,可以把它們寫在配置文件中。/etc/profile 或者 用戶家目錄的.bash_profile
位置變量 :
我們先定義一個(gè)shell。
[root@iz2ze0ajic0vbv28hcdctpz ~]# cat test.sh #!/bin/bash echo "執(zhí)行的文件: $0" echo "第一個(gè)參數(shù): $1" echo "第二個(gè)參數(shù): $2"
執(zhí)行查看結(jié)果。
[root@iz2ze0ajic0vbv28hcdctpz ~]# chmod +x test.sh
[root@iz2ze0ajic0vbv28hcdctpz ~]# ./test.sh 1 2
執(zhí)行的文件: ./test.sh
第一個(gè)參數(shù): 1
第二個(gè)參數(shù): 2
預(yù)定義變量:
常用的預(yù)定義變量有如下幾個(gè)。
#!/bin/bash echo "執(zhí)行的文件: $0" echo "第一個(gè)參數(shù): $1" echo "第二個(gè)參數(shù): $2" echo "所有參數(shù): $*" echo "當(dāng)前腳本的pid: $" echo "腳本參數(shù)個(gè)數(shù): $#"
查看執(zhí)行結(jié)果
[root@iz2ze0ajic0vbv28hcdctpz ~]# ./test.sh 1 2
執(zhí)行的文件: ./test.sh
第一個(gè)參數(shù): 1
第二個(gè)參數(shù): 2
所有參數(shù): 1 2
當(dāng)前腳本的pid: 30170
腳本參數(shù)個(gè)數(shù): 2
查看上一個(gè)命令執(zhí)行結(jié)果。
[root@iz2ze0ajic0vbv28hcdctpz hello]# ls
test
[root@iz2ze0ajic0vbv28hcdctpz hello]# echo $?
0
shell也是一門語(yǔ)言其實(shí)和其他的語(yǔ)言運(yùn)算符大同小異,不過(guò)這里我們還是來(lái)說(shuō)一下。本節(jié)說(shuō)一下運(yùn)算符相關(guān)內(nèi)容。
算數(shù)運(yùn)算符
關(guān)系運(yùn)算符
布爾運(yùn)算符
邏輯運(yùn)算符
字符串運(yùn)算符
文件測(cè)試運(yùn)算符
算數(shù)運(yùn)算符
命令: expr
作用: 求表達(dá)式的值
語(yǔ)法: expr 表達(dá)式
規(guī)則:
運(yùn)算符號(hào)兩邊要有空格
遇到特殊符號(hào)如*號(hào)需要在前面加反斜杠
空格和特殊字符串需要用引號(hào)括起來(lái)
操作:(先編寫一個(gè)運(yùn)算相關(guān)的shell腳本)
#!/bin/bash i=1 j=2 addition=`expr $i + $j` subtraction=`expr $i - $j` multiplication=`expr $j \* $j` division=`expr $j / $i` mod=`expr $j % $i` echo "addition=${addition} , subtraction=${subtraction} , multiplication=${multiplication} , division=${division} , mod=${mod}" if [ $i == $j ] then echo "i 等于 j" fi if [ $i != $j ] then echo "i 不等于 j" fi
查看結(jié)果:
? ~ ./operation.sh
addition=3 , subtraction=-1 , multiplication=4 , division=2 , mod=0
i 不等于 j
操作:(編寫腳本)
#!/bin/bash num1=5 num2=8 if [ $num1 -eq $num2 ] then echo "$num1 是否等于 $num2 : num1 等于 num2" else echo "$num1 是否等于 $num2: num1 不等于 num2" fi if [ $num1 -ne $num2 ] then echo "$num1 是否不等于 $num2: num1 不等于 num2" else echo "$num1 是否不等于 $num2 : num1 等于 num2" fi if [ $num1 -gt $num2 ] then echo "$num1 是否大于 $num2: num1 大于 num2" else echo "$num1 是否大于 $num2: num1 不大于 num2" fi if [ $num1 -lt $num2 ] then echo "$num1 是否小于 $num2: num1 小于 num2" else echo "$num1 是否小于 $num2: num1 不小于 num2" fi if [ $num1 -ge $num2 ] then echo "$num1 是否大于等于 $num2: num1 大于或等于 num2" else echo "$num1 是否大于等于 $num2: num1 小于 num2" fi if [ $num1 -le $num2 ] then echo "$num1 是否小于等于 $num2: num1 小于或等于 num2" else echo "$num1 是否小于等于 $num2: num1 大于 num2" fi
操作結(jié)果:
? ~ ./relation.sh
5 是否等于 8: num1 不等于 num2
5 是否不等于 8: num1 不等于 num2
5 是否大于 8: num1 不大于 num2
5 是否小于 8: num1 小于 num2
5 是否大于等于 8: num1 小于 num2
5 是否小于等于 8: num1 小于或等于 num2
編寫腳本:
#!/bin/bash num1=3 num2=23 if [ $num1 != $num2 ] then echo "$num1 != $num2 : num1 不等于 num2" else echo "$num1 != $num2: num1 等于 num2" fi if [ $num1 -lt 25 -a $num2 -gt 15 ] then echo "$num1 小于 25 且 $num2 大于 15 : 返回 true" else echo "$num1 小于 25 且 $num2 大于 15 : 返回 false" fi if [ $num1 -lt 25 -o $num2 -gt 25 ] then echo "$num1 小于 25 或 $num2 大于 25 : 返回 true" else echo "$num1 小于 25 或 $num2 大于 25 : 返回 false" fi
查看結(jié)果:
? ~ ./bool.sh
3 != 23 : num1 不等于 num2
3 小于 25 且 23 大于 15 : 返回 true
3 小于 25 或 23 大于 25 : 返回 true
編寫腳本:
#!/bin/bash apple="apple" pen="pen" if [ $apple = $pen ] then echo "$apple = $pen : apple 等于 pen" else echo "$apple = $pen: apple 不等于 pen" fi if [ $apple != $pen ] then echo "$apple != $pen : apple 不等于 pen" else echo "$apple != $pen: apple 等于 pen" fi if [ -z $apple ] then echo "-z $apple : 字符串長(zhǎng)度為 0" else echo "-z $apple : 字符串長(zhǎng)度不為 0" fi if [ -n "$apple" ] then echo "-n $apple : 字符串長(zhǎng)度不為 0" else echo "-n $apple : 字符串長(zhǎng)度為 0" fi if [ $apple ] then echo "$apple : 字符串不為空" else echo "$apple : 字符串為空" fi
執(zhí)行結(jié)果:
[root@iz2ze0ajic0vbv28hcdctpz ~]# ./string.sh
apple = pen: apple 不等于 pen
apple != pen : apple 不等于 pen
-z apple : 字符串長(zhǎng)度不為 0
-n apple : 字符串長(zhǎng)度不為 0
apple : 字符串不為空
編寫腳本:
#!/bin/bash num1=5 num2=8 if [[ $num1 -lt 10 && $num2 -gt 5 ]] then echo "返回 true" else echo "返回 false" fi if [[ $num1 -lt 10 || $num2 -gt 5 ]] then echo "返回 true" else echo "返回 false" fi
執(zhí)行結(jié)果:
[root@iz2ze0ajic0vbv28hcdctpz ~]# ./logic.sh
返回 true
返回 true
編寫腳本:
~ cat testfile.sh #!/bin/bash file="/root/testfile.sh" if [ -r $file ] then echo "該文件可讀" else echo "該文件不可讀" fi if [ -x $file ] then echo "該文件可執(zhí)行" else echo "該文件不可執(zhí)行" fi if [ -w $file ] then echo "該文件可寫" else echo "該文件不可寫" fi if [ -f $file ] then echo "該文件是普通文件" else echo "該文件是非普通文件" fi if [ -s $file ] then echo "該文件為空" else echo "該文件不為空" fi if [ -d $file ] then echo "該文件是目錄" else echo "該文件不是目錄" fi
執(zhí)行腳本:
? ~ ./testfile.sh
該文件可讀
該文件可執(zhí)行
該文件可寫
該文件是普通文件
該文件為空
該文件不是目錄
其實(shí)流程控制的本質(zhì)是差不多的,只是在語(yǔ)法上稍微有些差別,本節(jié)我們來(lái)盤一盤。
流程示意圖:
舉例:
? if cat if-one.sh #!/bin/bash a=10 if [ a > 5 ] then echo "a 大于 5" fi
執(zhí)行結(jié)果:
? if ./if-one.sh
a 大于 5
流程示意圖:
舉例:
? if cat if-double.sh #!/bin/bash age=18 if [ $age -ge 18 ]; then echo "成年" else echo "未成年" fi
執(zhí)行結(jié)果:
? if ./if-double.sh
成年
流程示意圖:
舉例:
? if cat if-multi.sh #!/bin/bash money=10 if [ $money -lt 1 ] then echo "1塊錢都沒(méi)有的比皮卡丘決定在家吃土" elif [ $money -ge 1 -a $money -lt 5 ] then echo "老板我要大白兔奶糖" elif [ $money -ge 5 -a $money -le 10 ] then echo "老板我要巧克力" else echo "老板給我拿個(gè)雞腿" fi
執(zhí)行結(jié)果:
? if ./if-multi.sh
老板我要巧克力
關(guān)于“shell基礎(chǔ)語(yǔ)法的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。
當(dāng)前名稱:shell基礎(chǔ)語(yǔ)法的示例分析-創(chuàng)新互聯(lián)
分享地址:http://muchs.cn/article32/pospc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、定制開(kāi)發(fā)、微信小程序、ChatGPT、面包屑導(dǎo)航、網(wǎng)站排名
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容