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