5個Linux新手學習Shell程式設計的Shell指令碼
如果您是Linux新手,一開始學習shell指令碼編寫可能會覺得很困難。但是,在使用Linux系統時,shell指令碼編寫是一項非常有用的技能。Shell指令碼可以自動化重複性任務,執行系統管理任務,甚至可以幫助軟體開發。
在本文中,我們將介紹五個Linux新手可以學習的shell指令碼,以開始學習shell程式設計。我們將介紹shell指令碼的一些基礎知識,並提供每個指令碼的示例,以幫助您瞭解它們的工作原理。
什麼是Shell指令碼?
Shell指令碼是用在Unix/Linux shell中執行的指令碼語言編寫的程式。Shell指令碼是一個強大的工具,允許您自動化任務,執行系統管理任務,甚至建立軟體。
Shell指令碼在命令列介面中執行,它們可以用於執行各種各樣的任務,從基本的 檔案管理到複雜的資料處理。
指令碼1:Hello World
每個程式設計師學習的第一個指令碼是經典的“Hello, World!”程式。這是一個簡單的指令碼,只需將訊息列印到螢幕上。以下是指令碼的樣子:
示例
#!/bin/bash echo "Hello, World!"
輸出
Hello, World!
讓我們分解一下。指令碼的第一行稱為“shebang”行,它告訴shell使用哪個直譯器來執行指令碼。在本例中,我們使用的是bash shell。
第二行是實際命令,它將訊息列印到螢幕上。echo命令簡單地顯示其後的文字。
要執行指令碼,將其儲存到檔案(例如,hello.sh),使用chmod +x hello.sh命令使其可執行,然後使用./hello.sh執行它。
指令碼2:簡單的計算器
接下來我們將介紹一個簡單的計算器指令碼。這個指令碼從使用者那裡獲取兩個數字作為輸入,並在它們上執行基本的算術運算。以下是指令碼的樣子:
示例
#!/bin/bash echo "Enter first number: " read num1 echo "Enter second number: " read num2 echo "The sum is: $((num1 + num2))"
輸出
Enter first number: Enter second number: The sum is: 0
讓我們分解一下。指令碼的前兩行提示使用者輸入兩個數字,然後將這些數字讀入num1和num2變數。
第三行執行實際計算。在本例中,我們使用$(( ))語法將num1和num2加在一起。
要執行指令碼,將其儲存到檔案(例如,calculator.sh),使用chmod +x calculator.sh命令使其可執行,然後使用./calculator.sh執行它。
指令碼3:檔案備份
接下來我們將介紹一個檔案備份指令碼。這個指令碼將檔案複製到備份目錄,並在檔名中新增時間戳。以下是指令碼的樣子:
#!/bin/bash backup_dir=/path/to/backup/dir/ filename=file.txt cp $filename $backup_dir/${filename}_$(date +%Y-%m-%d_%H-%M-%S)
讓我們分解一下。指令碼的第一行將名為backup_dir的變數設定為備份目錄的路徑。
第二行將名為filename的變數設定為我們要備份的檔名。
第三行使用cp命令將檔案複製到備份目錄。${filename}_$(date +%Y-%m-%d_%H-%M-%S)語法在檔名的末尾新增時間戳,以便每個備份都有唯一名稱。
要執行指令碼,將其儲存到檔案(例如,backup.sh),使用chmod +x backup.sh命令使其可執行,然後使用./backup.sh執行它。
指令碼4:系統資訊
接下來我們將介紹一個系統資訊指令碼。這個指令碼顯示有關係統的資訊,例如作業系統、核心版本和CPU資訊。以下是指令碼的樣子:
示例
#!/bin/bash echo "Operating system: $(uname -o)" echo "Kernel version: $(uname -r)" echo "CPU information: $(lscpu | grep "Model name" | awk '{print $3, $4, $5, $6, $7, $8}')"
輸出
Operating system: GNU/Linux Kernel version: 5.15.0-60-generic CPU information: AMD Ryzen 9 5950X 16-Core Processor
讓我們分解一下。指令碼的第一行是shebang行,和往常一樣。
接下來的三行使用各種命令來顯示系統資訊。uname -o命令顯示作業系統,uname -r命令顯示核心版本,lscpu | grep "Model name" | awk '{print $3, $4, $5, $6, $7, $8}'命令顯示CPU資訊。
要執行指令碼,將其儲存到檔案(例如,systeminfo.sh),使用chmod +x systeminfo.sh命令使其可執行,然後使用./systeminfo.sh執行它。
指令碼5:密碼生成器
我們將介紹的最後一個指令碼是一個密碼生成器。這個指令碼使用大寫和小寫字母、數字和特殊字元的組合生成隨機密碼。以下是指令碼的樣子:
示例
#!/bin/bash length=12 password=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9!@#$%^&*()_+-=' | fold -w $length | head -n 1) echo "Your new password is: $password"
輸出
Your new password is: YRY+zm:<JwYi
讓我們分解一下。指令碼的第一行是shebang行,和往常一樣。
第二行將名為length的變數設定為所需的密碼長度。
第三行使用cat /dev/urandom | tr -dc 'a-zA-Z0-9!@#$%^&*()_+-=' | fold -w $length | head -n 1命令生成隨機密碼。此命令使用cat /dev/urandom命令生成隨機資料,然後使用tr命令過濾掉不需要的字元。fold -w $length命令將輸出分成所需長度的行,head -n 1命令選擇第一行(即密碼)。
要執行指令碼,將其儲存到檔案(例如,password.sh),使用chmod +x password.sh命令使其可執行,然後使用./password.sh執行它。
指令碼6:檔案搜尋
允許您根據關鍵字搜尋目錄或子目錄中檔案的指令碼。這是一個示例:
#!/bin/bash echo "Enter directory to search: " read dir echo "Enter keyword to search for: " read keyword find $dir -name "*$keyword*" -print
此指令碼提示使用者輸入要搜尋的目錄和關鍵字,然後使用find命令搜尋名稱中包含該關鍵字的檔案。
指令碼7:目錄備份
一個指令碼,用於將整個目錄(包括子目錄和檔案)備份到備份位置。這是一個示例:
#!/bin/bash src_dir=/path/to/src/dir/ backup_dir=/path/to/backup/dir/ tar -czf $backup_dir/backup_$(date +%Y-%m-%d_%H-%M-%S).tar.gz $src_dir
此指令碼設定源目錄和備份目錄的變數,然後使用tar命令在備份目錄中建立源目錄的壓縮存檔,並在檔名中新增時間戳。
指令碼8:程序監控
一個監控特定程序並在程序停止執行時傳送警報的指令碼。這是一個示例:
#!/bin/bash process_name=myprocess while true do if ps aux | grep $process_name | grep -v grep > /dev/null then sleep 1 else echo "$process_name has stopped running." mail -s "Process Monitor Alert" user@example.com <<< "$process_name has stopped running." break fi done
此指令碼使用while迴圈持續檢查是否使用ps命令執行具有特定名稱的程序。如果程序未執行,則指令碼使用mail命令向指定的傳送電子郵件警報。
指令碼9:網頁抓取
一個從網站提取資料並將其儲存在檔案或資料庫中的指令碼。這是一個使用curl和grep命令的示例:
#!/bin/bash url="http://example.com" data=$(curl -s $url) echo $data | grep -oP '(?<=).*?(?= - 技術教學 )' > title.txt
此指令碼使用curl命令檢索網頁的HTML內容,然後使用grep提取標題標籤並將其儲存到檔案中。
指令碼10:SSH自動化
一個自動化SSH登入和在遠端伺服器上執行命令的指令碼。這是一個使用sshpass命令的示例:
#!/bin/bash server="example.com" username="user" password="password" command="ls" sshpass -p $password ssh $username@$server $command
此指令碼使用sshpass命令自動化SSH登入並在遠端伺服器上執行命令,無需使用者互動。
指令碼11:資料庫備份
一個執行MySQL資料庫備份並將它們上傳到遠端伺服器的指令碼。這是一個使用mysqldump命令和rsync命令的示例:
#!/bin/bash db_name="mydb" db_user="user" db_password="password" backup_dir="/path/to/backup/dir/" backup_file="$backup_dir/backup_$(date +%Y-%m-%d_%H-%M-%S).sql" mysqldump -u $db_user -p$db_password $db_name > $backup_file rsync -avz $backup_dir user@example.com:/path/to/remote/dir/
此指令碼使用mysqldump命令執行MySQL資料庫的備份並將備份儲存到一個檔名中包含時間戳的檔案中。然後它使用rsync命令將備份檔案上傳到遠端伺服器。
結論
Shell指令碼是一個強大的工具,可以幫助您自動化任務、執行系統管理任務甚至建立軟體。我們在本文中介紹的指令碼只是shell指令碼的冰山一角,但它們應該為您構建自己的指令碼打下良好的基礎。
記住,熟能生巧,所以不要害怕嘗試不同的命令和指令碼,看看什麼最適合您。祝您指令碼編寫愉快!