日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux进阶之路———Shell 编程入门

發(fā)布時間:2025/3/12 linux 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux进阶之路———Shell 编程入门 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

引言

通過 Shell 編程的學習,鋪平架構師道路上的一塊大磚。

Shell 在Linux 系統(tǒng)中的定位如下所示:

一、第一個 Shell 腳本

我們通過一個簡單的 Shell 腳本來感受一下。

在 Shell 中不需要加 “;” 結尾,通過 vim 可以進行 shell 的編程工作,并且一般建議為 shell 文件添加可執(zhí)行權限。

更改權限之后,執(zhí)行腳本:

另外如果沒有可執(zhí)行權限,還可以通過 sh 來執(zhí)行:

一般在企業(yè)中,都是需要加上可執(zhí)行權限的。

注意,本片文章后面的內(nèi)容全部忽略 chmod 操作。

二、Shell 變量

Shell 變量分為系統(tǒng)變量和用戶變量。

2.1 系統(tǒng)變量

系統(tǒng)變量指的是預先在 Linux 系統(tǒng)中定義好的變量(常量),如PATH 等。

另外,可以通過 set 命令來查看所有系統(tǒng)變量:

2.2 自定義變量

在 Shell 編程中,多數(shù)情況下會使用自定義變量。

基本語法:

1、賦值:變量名=值。注意,等號兩邊不能有空格,這是與其他編程語言有所區(qū)別的。

2、撤銷變量:unset? 變量名

3、聲明靜態(tài)變量:readonly? 變量名=值 。 注意:靜態(tài)變量不能 unset。

4、引用已定義的變量:$變量名? ? ?或? ? ?${變量名}? ? 。后者可以在連續(xù)的字符串中幫助 Shell 解釋器區(qū)分變量名的邊界。

5、變量名可以是字母、數(shù)字、下劃線 的組合,且不能以數(shù)字開頭。這與Java 的變量命名規(guī)則相同。

6、變量名一般習慣大寫。

7、將命令返回值賦給變量:第一種:反引號:A=`ls -l`? ; 第二種 :$(ls -l) 。兩種方式等價。

案例:定義一個 變量 A ,輸出,然后 unset ,再輸出:

案例:定義一個靜態(tài)變量 B,查看 unset 的效果:

可以看到,readonly 類型的變量是不能 unset 的。

2.3 環(huán)境變量

可以自定義環(huán)境變量,供其他程序使用。

第一步:vim? ?/etc/profile

第二步:export? 變量名=值? ? ? ? ? 功能:將 Shell 變量輸出為環(huán)境變量(或先定義變量,再 export $變量名)

第三步:source? /etc/profile? ? ? ? ?功能:讓修改后的配置信息立即生效

第四步:echo? $變量名? ? ? ? ? ? ? ? 功能:查詢環(huán)境變量的值。

vim 打開 profile 文件,在文件最末尾(輸入G),添加我們需要定義的環(huán)境變量 SAY_HELLO,保存并退出:?

然后刷新配置文件:source /etc/profile :

可以看到,變量可以被直接使用了,我們可以在其他的 Shell 文件中嘗試使用剛剛定義的環(huán)境變量:

可以看到,可以使用。

2.4 多行注釋

在 Shell 文件中使用? ? ?:<<!? xxxx? !? ? ?進行多行注釋。

2.5 位置參數(shù)變量

當我們執(zhí)行一個Shell 腳本的時候,如果希望獲得命令行參數(shù)信息,可以通過位置參數(shù)變量。比如,我們執(zhí)行 ./app.sh? 100? 200 ,這就是一個 Shell 的執(zhí)行命令行,可以在 app.sh? 中動態(tài)獲得參數(shù)信息,即100 和 200。

常用的位置參數(shù)獲取方式有:

$n? ?: n 為大于等0 的自然數(shù),其中 $0 表示 shell 文件本身,$1 - $9? 表示第一到第九個參數(shù), 10 以上的參數(shù)需要寫作 ${10}。

$*? ?:? 表示命令行中的所有參數(shù),注意,$* 把所有參數(shù)看做是一個整體。

$@ : 表示命令行中的所有參數(shù),注意,$@ 把所有參數(shù)都區(qū)分對待。$* 和 $@ 這兩者主要在循環(huán)語句的時候可以看出區(qū)別。

$#? ?: 表示命令行中所有參數(shù)的個數(shù)。

演示:在 HelloWorld.sh 中輸出這些位置變量參數(shù),然后觀察結果:

2.6 預定義變量

預定義變量指的是 Shell 設計者事先已經(jīng)定義好的變量,可以直接在 Shell 腳本中使用:

$$? ? 表示當前進程的進程號(PID)

$!? ? ?表示后臺運行的最后一個進程的進程號(PID)

$?? ? 表示最后一次執(zhí)行的命令的返回狀態(tài)。如果這個變量的值為0,證明上一個命令執(zhí)行正確;如果這個變量的值非 0 (具體是哪個數(shù),由命令自己決定),則證明上一個命令執(zhí)行不正確。

演示:首先,我們定義一個新的 Shell 腳本:myShell.sh,然后通過其他的 Shell 來執(zhí)行它,并輸出響應的預定義變量:?

myShell.sh:

HelloWorld.sh:

執(zhí)行結果:

其中,在HelloWorld.sh? 中的 &? 符號,代表將Shell 腳本以后臺的方式運行。

三、運算符

第一種:$((運算式))

第二種:$[運算式]

第三種:expr 運算式(注意,expr 運算符之間要有空格,因為乘號需要轉義)

另外,還有一些常見的比較運算符:

=? 字符串比較

-lt? 小于

-le? ?小于等于

-eq? 等于

-gt? ?大于

-ge? 大于等于

-ne? ?不等于

四、Shell 條件判斷

4.1 基本的 if 判斷

基本語法:

if [ condition ]

注意,條件語句要與中括號之間有空格。

按照文件權限進行判斷:

-r? ?有讀的權限

-w? ?有寫的權限

-x? ? 有執(zhí)行的權限

按照文件類型判斷:

-f? 文件存在 并且是一個常規(guī)文件

-e? 文件存在

-d? ?文件存在,并且是一個目錄

案例:實現(xiàn)一個Shell 程序,判斷輸入的參數(shù),大于 60 ,則輸出 “及格了”,如果小于 60,則輸出“不及格”。

4.2 case 語句

基本語法:

case $變量 in "值1")執(zhí)行語句1;; "值2")執(zhí)行語句2;; "值3")執(zhí)行語句3;; ...... *)沒有匹配項的執(zhí)行語句;; esac

case 語句的功能和所有其他開發(fā)語言一致,不過語法有些不同。

案例:當命令行參數(shù)是 1 時,輸出 Mon,是 2 時,輸出 Tues,其他數(shù)字,則輸出 Other。

五、Shell 流程控制

5.1 for 循環(huán)

基本語法1:

for 變量 in 值1 值2 值3... do執(zhí)行語句 done

案例:打印命令行中的參數(shù)(使用 $*? 和 $@并觀察區(qū)別):

基本語法2:

for((初始值; 循環(huán)控制條件; 變量變化)) do執(zhí)行語句 done

案例:從1 加到 100 ,然后輸出顯示:

5.2 while循環(huán)

基本語法:

while [ 條件判斷 ] do執(zhí)行語句 done

案例:從命令行輸入一個數(shù)字 n ,統(tǒng)計 從1 加到 n? 的值是多少:

六、Shell 讀取控制臺輸入

基本語法:

read? [選項]? 變量名

選項及參數(shù):

-p? ? 指定讀取值時的提示符

-t? ? ?指定讀取值時等待的時間(秒),如果沒有在指定時間內(nèi)輸入,則不再等待。

變量名:指定讀取值的變量名

七、Shell 函數(shù)

Shell 編程和其他編程一樣,同樣存在系統(tǒng)函數(shù),和自定義函數(shù)。其中有兩個比較重要的系統(tǒng)函數(shù):

7.1 系統(tǒng)函數(shù)

1、basename 函數(shù)

功能: 返回完整的路徑最后 / 的部分,即獲取文件的文件名。

基本語法:

basename [pathname] [suffix]

suffix 是后綴,可以用于除去文件名的后綴名。

2、dirname 函數(shù)

功能:返回完整路徑最后 /? 的前面的部分,常用于返回路徑部分。

基本語法和 basename 完全一致。

7.2 自定義函數(shù)

基本語法:

[function]? 函數(shù)名[()] {執(zhí)行語句[return int] }

說明:Shell 函數(shù)不需要寫任何參數(shù), return 返回,如果不加,將以最后一條命令運行結果作為返回值。return 后面跟0 ~ 255 的數(shù)值。調(diào)用函數(shù)直接書寫函數(shù)名稱即可,函數(shù)的返回值在調(diào)用函數(shù)后,通過 $? 來獲得。

另外,雖然 Shell 函數(shù)定義不需要定義參數(shù),但是也是可以傳入?yún)?shù)的,不過語法比較奇怪,在調(diào)用的時候,我們可以這樣寫:

同樣也是可以的,但是注意,變量名要保持一致。也就是說,在 Shell 腳本文件中,不論是在哪里定義的變量,只要還在這個腳本文件中,就可以直接訪問。上圖也看到,我們在 readNum 函數(shù)中通過控制臺,讀入了兩個數(shù)字 n1 和 n2 ,直接在twoSum 函數(shù)體中使用也是可以的。另外, readNum 沒有返回語句,默認也是最后一行語句執(zhí)行的結果。

?

綜上,就是關于Shell 編程的入門知識,后面還會增加相關的文章,歡迎大家文末留言。

總結

以上是生活随笔為你收集整理的Linux进阶之路———Shell 编程入门的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。