shell講解-小案例
一、檔案拷貝輸出檢查
下面測試檔案拷貝是否正常,如果cp命令並沒有拷貝檔案myfile到myfile.bak,則列印錯誤資訊。注意錯誤資訊中basename $0
列印指令碼名。如果指令碼錯誤退出,一個好習慣是顯示指令碼名並將之定向到標準錯誤中。使用者應該知道產生錯誤的指令碼名。
[root@localhost ~]# cat ifcp.sh
#!/bin/sh
# ifcp.sh
if cp myfile myfile.bak; then
echo "good copy"
else
echo "`basename $0`: error could not copy the file" >&
fi
[root@localhost ~]# ./ifcp.sh
cp: cannot stat `myfile': No such file or directory
ifcp.sh: error could not copy the file
[root@localhost ~]# cat ifcp.sh
#!/bin/sh
# ifcp.sh
if cp myfile myfile.bak > /dev/null >&; then
echo "good copy"
else
echo "`basename $0`: error could not copy the file" >&
fi
[root@localhost ~]# ./ifcp.sh
ifcp.sh: error could not copy the file
上面當中>/dev/null表示任何標準輸出都定向到那個無盡的“黑洞”/de/null中,然後2>&1表示錯誤輸出也是到/dev/null中,&1表示前面的那個/dev/null,指令碼執行時,所有輸出包括錯誤重定向至系統垃圾堆。
二、五顏六色的指令碼
#!/bin/bash clear
echo -e "\033[1m Hello World"
# bold effect
echo -e "\033[5m Blink"
# blink effect
echo -e "\033[0m Hello World"
# back to noraml echo -e "\033[31m Hello World"
# Red color
echo -e "\033[32m Hello World"
# Green color
echo -e "\033[33m Hello World"
# See remaing on screen
echo -e "\033[34m Hello World"
echo -e "\033[35m Hello World"
echo -e "\033[36m Hello World" echo -e -n "\033[0m"
# back to noraml
echo -e "\033[41m Hello World"
echo -e "\033[42m Hello World"
echo -e "\033[43m Hello World"
echo -e "\033[44m Hello World"
echo -e "\033[45m Hello World"
echo -e "\033[46m Hello World" echo -e "\033[0m Hello World"