1、寫一個腳本
(1) 能接受四個參數:start, stop, restart, status
start: 輸出“starting 腳本名 finished.”
…
(2) 其它任意參數,均報錯退出;
#!/bin/bash # case $1 in start) echo "starting $0 finished" ;; stop) echo "stopping $0 finished" ;; restart) echo "restarting $0 finished" ;; status) echo "status $0 finished" ;; *) echo "Usage:$(basename $0){start|stop|restart|status}" exit 1 ;; esac
2、寫一個腳本,判斷給定的用戶是否登錄了當前系統;
(1) 如果登錄了,則顯示用戶登錄,腳本終止;
(2) 每3秒鐘,查看一次用戶是否登錄;
#!/bin/bash # method() { status=$(who | grep $1) if [[ -n "$status" ]];then touch /tmp/online fi } while true;do method $1 && sleep 3 if [ -f /tmp/online ];then echo "$1 is online" else echo "$1 isn't online" fi rm -f /tmp/online done
3、寫一個腳本,顯示用戶選定要查看的信息; cpu) display cpu info mem) display memory info disk) display disk info quit) quit 非此四項選擇,則提示錯誤,并要求用戶重新選擇,只到其給出正確的選擇為止;
#!/bin/bash # cat <<EOF 輸入mem>display memory info 輸入disk>display disk info 按Q>退出 EOF read -p ‘請按對應的字母鍵,否則五秒后自動退出’ -t 5 name if [[ "$name" == "Q" ]];then echo "您選擇退出"; exit 1 elif [[ "$name" == "cpu" ]];then cat /proc/cpuinfo elif [[ "$name" == "mem" ]];then df -lh elif [[ "$name" == "disk" ]];then fdisk -l else echo "您輸入有誤,請重新選擇" bash $0 fi
4、寫一個腳本
(1) 用函數實現返回一個用戶的UID和SHELL;用戶名通過參數傳遞而來;
(2) 提示用戶輸入一個用戶名或輸入“quit”退出;
當輸入的是用戶名,則調用函數顯示用戶信息;
當用戶輸入quit,則退出腳本;進一步地:顯示鍵入的用戶相關信息后,再次提醒輸出用戶名或quit:
#!/bin/bash # doing() { read -p "請輸入用戶名或quit退出" name if [[ "$name" == "quit" ]];then exit 0 else userinfo $name fi } userinfo() { id $1 &> /dev/null if [ $? -eq 0 ];then grep -E ^$1 /etc/passwd | awk -F: '{print $3,$NF}' doing else echo "user not exist" exit fi } doing
5、寫一個腳本,完成如下功能(使用函數)
(1) 提示用戶輸入一個可執行命令的名字;獲取此命令依賴的所有庫文件;
(2) 復制命令文件至/mnt/sysroot目錄下的對應的rootfs的路徑上,例如,如果復制的文件原路徑是/usr/bin/useradd,則復制到/mnt/sysroot/usr/bin/目錄中;
(3) 復制此命令依賴的各庫文件至/mnt/sysroot目錄下的對應的rootfs的路徑上;規則同上面命令相關的要求;
#!/bin/bash # doing() { mkdir -p /mnt/sysroot read -p "請輸入一個可執行命令" name which $name &> /dev/null if [ $? -eq 0 ];then path=$(which $name) ldd $path echo "==========開始復制命令文件==========" new_command_path=$(echo ${path%/*})/ cp -r $path /mnt/sysroot/$new_command_path &> /dev/null echo "==========復制命令文件完畢==========" echo "==========開始復制命令依賴的庫文件==========" mkdir -p /mnt/sysroot/$new_command_path/$name-lib for i in $(ldd $path);do cp $i /mnt/sysroot/$new_command_path/$name-lib &> /dev/null done echo "==========復制命令依賴的庫文件完畢==========" else echo "the command not found" exit 1 fi } doing
原創文章,作者:N24_澀味,如若轉載,請注明出處:http://www.www58058.com/65454
寫的很好,下次可以把一次作業寫在一個里面