第十二章、學習shell腳本
以下皆爲實踐題,請自行編寫出程序
- 請建立一個腳本,當你執行該腳本的時候,該腳本可以顯示:(1)你目前的身份(用 whoami) (2)你目前所在的目錄(用pwd)
#!/bin/bash
who am i
pwd
exit 0
- 請自行編寫一個程序,該程序可以用來計算【你還有幾天可以過生日】?
#!/bin/bash
echo -e "計算你還有幾天可以過生日"
read -p "輸入你的生日,格式 MMDD:如0402" day1
day=$( echo ${day1} | grep '[0-9]\{4\}')
if [ "${day1}" == "" ]; then
echo "你輸入的日期有誤"
exit 1
fi
year=$(date +%Y)
day1="${year}${day}"
date_now=$(date +%s)
date_birth=$(date --date="${day1}" +%s)
date_total_s=$((${date_birth}-${date_now}))
if [ "${date_total_s}" -lt "0" ]; then
year=$((${year}+1))
day1="${year}${day}"
date_now=$(date +%s)
date_birth=$(date --date="${day1}" +%s)
date_tital_s=$((${date_birth}-${date_now}))
fi
date_d=$((${date_total_s}/60/60/24))
date_h=$(($((${date_total_s}-${date_d}*60*60*24))/60/60))
echo "你還有${date_d}天${date_h}小時過生日"
- 讓用戶輸入一個數字,程序可以由1+2+3+…一直累加到用戶輸入的這個數字爲止。
#!/bin/bash
read -p "輸入一個大於0的整數n:" n
num=$(echo ${n} | grep '[0-9]\{1,\}')
if [ "${num}" == "" -o "${num}" == "0" ]; then
echo "你輸入的數字有誤"
exit 1
fi
s=0
for ((i; i<=${n}; i=i+1))
do
s=$((${s}+${i}))
done
echo "${n}的累加和爲${s}"
- 編寫一個程序,它的作用是:(1)先查看一下 /root/test/logical這個名稱是否存在;(2)若不存在,則建立一個文件,使用touch來建立,建立完成後退出; (3)如果存在的話,判斷該名稱是否爲文件,若爲文件則將之刪除後建立一個名爲logical的目錄之後退出;(4)如果存在,而且該名稱爲目錄,則刪除此目錄
#!/bin/bash
path=/root/test/logical
test -e ${path} && res=1 || res=0
if [ "${res}" == "0" ] ; then
touch ${path}
echo "該名稱不存在,已創建同名文件"
exit 0
fi
test -f ${path} && res=1 || res=0
if [ "${res}" == "1" ] ; then
rm ${path}
mkdir ${path}
echo "該名稱存在,且爲文件,已被刪除,創建同名目錄"
exit 0
fi
rmdir ${path}
echo "該名稱存在,且爲目錄,已被刪除"
exit 0
- 我們知道/etc/passwd裏面以:來分隔,第一欄爲賬號名稱。請寫一個程序,可以將/etc/passwd的第一欄取出來,而且每一欄都以一行字符串【The 1 account is “root”】來顯示,那個1表示行數。
names=$(cat /etc/passwd | cut -d ":" -f1)
i=1
for name in ${names}
do
echo "The ${i} account is ${name}"
i=$((${i}+1))
done
exit 0