shell入門,Linux系統應用 第八章 Shell編程入門

 2023-11-09 阅读 29 评论 0

摘要:8.1Shell編程過程 在Linux中,Shell不但能與用戶進行逐個命令交互執行,也可以通過腳本語言進行編程。通過對Shell進行編程,可使大量任務自動化,對于系統管理、系統維護方面特別有用。 復習與Shell相關的命令 1.現在無論使用哪種Linux操作系統ÿ

8.1Shell編程過程

在Linux中,Shell不但能與用戶進行逐個命令交互執行,也可以通過腳本語言進行編程。通過對Shell進行編程,可使大量任務自動化,對于系統管理、系統維護方面特別有用。
復習與Shell相關的命令

1.現在無論使用哪種Linux操作系統,默認的Shell總是/bin/bash。
2.查看系統中SHELL變量的值:
echo $SHELL
3.查看系統內置了哪些Shell,有以下兩種方法:
①cat /etc/shells
②chsh -list
還有一種為③vi /etc/shells

shell入門?1.創建Shell程序
與MS-DOS系統中的批處理文件(.bat)類似, Linux中的腳本(Shell程序)是一個文本文件,包含各類Linux的Shell命令。通過腳本文件將這些命令匯集在一起,可連續執行shell命令。

在shell腳本的第一行中,必須寫 #!/bin/bash
如果是用其他shell,在修改相應的shell路行 #!/bin/sh表示本腳本由/bin/路徑的sh程序來解釋
跟命令行下 ~ #/bin/sh Scriptname 效果相同
如果不寫也可以,那就用你登陸的那個shell來解釋執行. 可以不寫,但最好還是寫上去

舉例:編寫一個最簡單的“Hello World!”程序。
步驟:
(1)創建一個用于保存文件的目錄:mkdir /usr/program
(2)在program目錄下新建一個文本程序first。
(3)打開first文件,輸入Shell的腳本。

#!/bin/bash	該文件后面的代碼將用/bin/bash來執行。這是一般Shell程序第1行中必須包含的內容。
var=“Hello World!”	為變量var定義了一個字符串值。
echo  $var	將變量var的值顯示輸出到終端。

shell入門教程?2.設置執行權限
創建好first文件后,使用ls -l命令可以看到文件的所有者(這里是root )對該文件只有讀和寫的權限,沒有執行權限。

執行chmod u+x /usr/program/first為腳本文件設置所有者的執行權限。當然,也可以執行chmod a+x /usr/program/first設置所有用戶都可以運行該腳本程序。

注意:與DOS或Windows中的批處理程序不同,Linux中的腳本文件不是按擴展名來識別,而是通過為文件添加執行權限來允許其執行,用戶可以為腳本文件設置任意擴展名。

3.執行Shell程序
兩種方法:
(1)使用Shell程序執行
#bash /usr/program/first
使用這種方法時,不需要設置腳本程序的可執行權限(可忽略第二步)。

(2)直接執行
#/usr/program/first
使用這種方法時,需首先設置該文件的執行權限。

(3)如果執行當前目錄下的腳本文件,通常也應該使用一個點表示當前目錄,如執行當前目錄下的腳本文件test,可使用命令:# ./test

8.2Shell的語法介紹

使用變量
在Shell程序中,提供了說明和使用變量的功能。與高級編程語言不同,在Shell程序中所有變量保存的值都是字符串。

在Linux的Shell中,可以使用以下幾種變量:
1.環境變量:是指與Shell執行的環境相關的一些變量。Shell環境變量在Shell啟動時,就已定義好,如PATH,HOME,MAIL等,這些變量用戶還可以重新定義,也可以導入新的,如下是導讀ABCD=2
在這里插入圖片描述
2.用戶自定義變量: 變量名=變量值
3.預定義變量(系統變量):用戶不能修改,只能引用這些變量。 所有的預定義變量都是由“”符號與另一個符號組成的,常用的Shell預定義變量有以下幾個:(所有的預定義變量都是”符號與另一個符號組成的,常用的Shell預定義變量有以下幾個:(所有的預定義變量都是Shell開頭)

$#  :位置參數的數量
$* :所有位置參數的內容
$? :命令執行后返回的狀態
$$ :當前進程的進程號
$!  :后臺運行的最后一個進程號
$0 :當前執行的進程名

預定義好$1.$2.$3在執行程序時就輸入在文件名跟后面
在這里插入圖片描述
輸入/輸出內部命令
在這里插入圖片描述

#!/bin/bash
echo Name:
read NAME
echo Telephone:
read PHONE
echo $NAME,$PHONE>contact.txt

條件測試
1.測試命令執行結果
執行任何Linux命令都可能存在兩種狀態:正確或錯誤。若前一條命令正確執行,則返回狀態值為0,返回值為任何非0值都表示執行命令出錯。

使用預定義變量“$ ?”可返回命令執行后的狀態,在程序中可根據預定義變量“$?”的值來判斷前一條命令的執行是否正確。

2.測試文件狀態
[ 測試表達式 ]
注意:中括號“[]”與測試表達式之間必須有一個空格來分隔。

測試文件狀態可使用以下參數:
-e 文件名:若文件存在,返回真。
-r 文件名:若文件可讀,返回真。
-w 文件名:若文件可寫,返回真。
-x 文件名:若文件可執行,返回真。
-s 文件名:若文件類型為套接字文件,返回真。
-d 文件名:若文件類型為目錄文件,返回真。
-f 文件名:若文件類型為普通文件,返回真。-c 文件名:若文件類型為字符設備文件,返回真。
-b 文件名:若文件類型為塊設備文件,返回真。

3.測試數據值
-eq:判斷是否相等
-ne:判斷是否不相等
-gt:判斷是否大于
-ge:判斷是否大于等于
-lt:判斷是否小于
-le:判斷是否小于等于

4.測試字符串:
= != -z -n

5.邏輯操作符:
! -a -o

流程控制語句

1.if條件語句
在這里插入圖片描述
2.case條件語句
在這里插入圖片描述
3.for循環語句
在這里插入圖片描述
4.while和until循環語句
在這里插入圖片描述
5.函數
在這里插入圖片描述

處理參數

1.位置參數
當調用Shell程序的命令行時,除了輸入Shell程序名之外,還可以在后面跟上多個參數,這些參數與在命令行中的位置有關,因此稱為位置參數。各位置參數之間用空格分隔,用$1表示第1個參數,$2表示第2個參數,依次類推。而$0是一個特殊的變量,其內容是當前Shell程序的文件名。

2.函數參數
向函數傳遞參數與向一般腳本傳遞參數一樣,應使用預定義變量$1~$9來傳遞。函數取得所傳參數后,將原始參數傳回Shell腳本。

8.3調試Shell程序

一般錯誤
1.輸入錯誤:如輸入了錯誤的關鍵字、成對的符號漏輸入一部分等。
2.字符大小寫在Linux中,對大小寫字符是嚴格區分的,輸入時需要注意。所有關鍵字都是使用小寫字母來表示的,建議變量名使用大寫字母組合來表示。
3.循環錯誤:由于Shell中的循環控制語句與一般高級程序設計語言有所不同,輸入結構時容易出錯。

調試跟蹤
1.-n選項
bash命令的“-n”選項使Shell不執行腳本,僅檢查腳本中的語法問題。
在這里插入圖片描述
2.-v選項
bash命令的“-v”選項使Shell在執行程序過程中,將讀入的每一個命令行都原樣輸出到終端。
在這里插入圖片描述
3.-x選項
bash命令的“-x”選項使Shell在執行程序過程中,把執行的每一個命令在行首用一個“+”號加上對應的命令顯示在終端上,并把每一個變量和該變量的值也顯示出來。使用該選項更方便跟蹤程序的執行過程。
在這里插入圖片描述

Shell編程實例:

1.增加用戶賬戶
舉例20:編寫一個Shell程序addaccount.sh,在系統中增加四個賬戶,同時設定他們的初始密碼為123456,主組群為wl15。
先新加一個組wl15,然后for循環,指定用戶加入組wl15,并添加密碼123456
在這里插入圖片描述

2.統計子目錄和文件數量
舉例21:
編寫一個Shell程序count.sh,統計當前目錄中子目錄以及文件的數量。
在這里插入圖片描述
在這里插入圖片描述
3. 九九乘法表
舉例22:編寫乘法口訣cfkj.sh,打印出九九乘法表。
在這里插入圖片描述
在這里插入圖片描述

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://808629.com/170855.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 86后生记录生活 Inc. 保留所有权利。

底部版权信息