1. 程式人生 > 其它 >linux學習之shell指令碼

linux學習之shell指令碼

【實驗目的】‍

‌    通過本實驗練習,使學生了解常用SHELL的程式設計特點,掌握SHELL 程式設計的基礎知識。對SHELL程式流程控制、SHELL程式的執行方式、bash程式的除錯方法及bash的常用內部命令有進一步的認識和理解。

‌【實驗內容】

‌    編寫shell指令碼,包含以下功能:

‌1、輸出系統基本資訊,系統執行時自動獲取相關值並代替*:

‌USER:****  HOST:****  DATE:****年**月**日

‌2、建立以下選單,並完成選單相應功能:

‌A: 建立子目錄並複製檔案(在/tmp下建立子目錄t,並將/proc/cpuinfo檔案拷貝進去)

‌B: 檔案許可權測試(測試對/proc/cpuinfo是否有r、w、x的許可權,分別輸出測試結果)

‌C: 檔案字元轉換(將/proc/cpuinfo檔案中的小寫字元轉換為大寫並輸出)

‌D: 子目錄總數統計(統計自己主目錄下字目錄的數量並輸出)

‌E: 文字檔案行數統計(統計/proc/cpuinfo檔案中空行的行數並輸出)

‌Q: 退出系統

‌請輸入您的選擇:

1 ( 10分 )

‌【實驗目的】

‌    通過本實驗練習,使學生了解常用SHELL的程式設計特點,掌握SHELL 程式設計的基礎知識。對SHELL程式流程控制、SHELL程式的執行方式、bash程式的除錯方法及bash的常用內部命令有進一步的認識和理解。

‌【實驗內容】

‌    編寫shell指令碼,包含以下功能:

‌1、輸出系統基本資訊,系統執行時自動獲取相關值並代替*:

‌USER:****  HOST:****  DATE:****年**月**日

‌2、建立以下選單,並完成選單相應功能:

‌A: 建立子目錄並複製檔案(在/tmp下建立子目錄t,並將/proc/cpuinfo檔案拷貝進去)

‌B: 檔案許可權測試(測試對/proc/cpuinfo是否有r、w、x的許可權,分別輸出測試結果)

‌C: 檔案字元轉換(將/proc/cpuinfo檔案中的小寫字元轉換為大寫並輸出)

‌D: 子目錄總數統計(統計自己主目錄下字目錄的數量並輸出)

‌E: 文字檔案行數統計(統計/proc/cpuinfo檔案中空行的行數並輸出)

‌Q: 退出系統

‌請輸入您的選擇:

‍‌3、執行指令碼,測試每一個選單功能

#!/bin/bash
user=$(whoami)
host=$(hostname)
date=$(date +%Y年%m月%d日)

echo -e "\033[33mUSER:$user HOST:$host DATE:$date\033[0m"

cd /tmp
echo -e "\033[32m選單如下:
A: 建立子目錄並複製檔案(在/tmp下建立子目錄t,並將/proc/cpuinfo檔案拷貝進去)
B: 檔案許可權測試(測試對/proc/cpuinfo是否有r、w、x的許可權,分別輸出測試結果)
C: 檔案字元轉換(將/proc/cpuinfo檔案中的小寫字元轉換為大寫並輸出)
D: 子目錄總數統計(統計自己主目錄下字目錄的數量並輸出)
E: 文字檔案行數統計(統計/proc/cpuinfo檔案中空行的行數並輸出)
Q: 退出系統\033[0m"
while true
do
        read -p "請輸入您的選擇:" choice
        case $choice in
                A|a)
                        echo -e "\033[34m在/tmp建立子目錄t\033[0m"
                        mkdir /tmp/t
                        echo -e "\033[34m將/proc/cpuinfo檔案拷貝到t目錄下\033[0m"
                        cp /proc/cpuinfo /tmp/t
                        tree /tmp/t
                        ;;
                B|b)
                        echo -e "\033[34m測試cpuinfo檔案有哪些許可權\033[0m"                                    
                        if [ -r /tmp/t/cpuinfo ]
                        then
                                echo -e "\033[34m有讀許可權\033[0m"
                        else
                                echo -e "\033[31m沒有讀的許可權\033[0m"
                        fi
                        if [ -w /tmp/t/cpuinfo ]
                        then
                                echo -e "\033[34m有寫許可權\033[0m"
                        else
                                echo -e "\033[31m沒有寫的許可權\033[0m"
                        fi
                        if [ -x /tmp/t/cpuinfo ]
                        then
                                echo -e "\033[34m有執行許可權\033[0m"
                        else
                                echo -e "\033[31m沒有執行的許可權\033[0m"
                        fi
                        ;;
                C|c)
                        echo -e "\033[34m將cpuinfo檔案中的小寫字元轉換成大寫字元並輸出"
                        test -e /tmp/t/cpuinfo && cat /tmp/t/cpuinfo |tr [:lower:] [:upper:] && echo -e "\033[0m"||echo -e "\033[31mcpuinfo檔案不存在\033[0m"
                        ;;
                D|d)
                        sum=$(ls -l $(pwd) |grep ^d |wc -l)
                        echo -e "\033[34m主目錄$(pwd)下的目錄有$sum個\033[0m"
                        ;;
                E|e)
                        var=$(grep '^$' /tmp/t/cpuinfo |wc -l)
                        echo -e "\033[34mcpuinfo檔案的空行有$var個\033[0m"
                        ;;
                Q|q)
                        echo -e "\033[34m刪除r目錄並退出\033[0m"
                        #rm -rf t#結束迴圈後自動刪除
                        break
                        ;;
                *)
                        echo -e "\033[31m輸入錯誤,請重新輸入 或者 輸入q退出\033[0m"
                        ;;
                esac
done
rm -rf t