|
藍森林 http://www.lslnet.com 2006年6月26日 11:18
請教一個if判斷的問題!
有帖子說,任何一個程序或者命令都會送回一個一個值:0或者1
0代表操作成功,1代表操作失敗,那麼我是否可以把任何一個操作
放在if [操作]來進行判斷呢,比如
......
if [ tar -c | gzip -9 >"$1".tar.gz];then
echo "operation successfully!"
exit 0
else
exit 1
我在一個備份腳本裡這麼寫了,為什麼老是出錯?
[root@guoxin bin]# mybackup /root/perlfolder /perlfolder
/usr/bin/mybackup: line 17: [: missing `]'
gzip: ]: No such file or directory
我的shell script名稱叫 mybackup 它需要傳入兩個參數:
第一個參數代表要打包壓縮的文件名,第二個參數代表打包後的文件名,在我的腳本中
要進行參數測試,只有參數正確才予以處理,下面是我的完整的script
#! /bin/bash
# this is a file backup tool shell
if [ -z "$1" ];then
echo "Error:missed filename you want to backup!"
exit 1
fi
if [ ! -e "$1" ];then
echo "Error:no such a file or diretory:$1"
exit 1
fi
if [ -z "$2" ];then
echo "Error:missed filename after backup!"
exit 1
fi
if [ tar -c "$1" | gzip -9 > "$2".tar.gz ];then
echo "Opration successfully!"
exit 0
else
exit 1
fi
大家幫我看看是什麼問題呀,是不是tar命令不能放在if的判斷中啊?
是不是tar命令不返回任何值啊? |
我把那個if語句後面的[] 去掉了,就沒有出現上述的這個錯誤了,但有出現新的錯誤,
比如我現在運行這個script 並且帶入合適的參數:
$ mybackup /root/perlfolder /usr/perlfolder
出現如下的結果:我不明白意思!
tar: Removing leading `/' from member names
Opration successfully!
奇怪的是,我在/usr/確實又看見了剛剛生成的perlfolder.tar.gz 這個壓縮文件
為什麼會出現:tar: Removing leading `/' from member names 是什麼意思啊?? |
沒人回答,我自己頂啊 |
你可以先寫一個需求,然後用$?判斷=0就是成功,=1就是失敗。 |
謝謝樓上的大哥,能否說具體一點,就我那個腳本而言 |
我說說
把if語句[]改成[[ ]]試試,注意用法[[ abc ]],要有空格 |
tar -c | gzip -9 >"$1".tar.gz
if [ $? = 0 ]; then
echo "operation successfully!"
exit 0
else
exit 1
fi |
這一句到底錯在哪裡?
if [ tar -c | gzip -9 >"$1".tar.gz];then |
不能那樣直接判斷的,如果用輸出的值的話要用反引號。 |
哦,謝謝大哥,我再按照你說的試試 |
我把if [ tar -c "$1" | gzip -9 > "$2".tar.gz ]換成了if ` tar -c "$1" | gzip -9 > "$2".tar.gz`
運行:
$ mybackuo /root/perfolder /usr/perlfolder
但是還是出現如下的錯誤:
tar: Removing leading `/' from member names
可以在/usr/確實成功地生成了perlfolder.tar.gz這個文件.
那麼那個錯誤信息有意味著什麼:
tar: Removing leading `/' from member names |
1) 不是0 成功, 1 失敗. 而是 0 是"真", 非 0 是假.
2) [ xxx ] 是 test 命令, 請 man test 瞭解 expression 有哪些
3) if 後面是 command , 但不是 command 的 stdout , 因此 if `xxx xxxx` 是錯的, 去掉 ` ` 就行. |
-->
我按照網中人大哥的說話,去掉了``,還是不行
$ mybackuo /root/perfolder /usr/perlfolder
但是還是出現如下的錯誤:
tar: Removing leading `/' from member names
可以在/usr/確實成功地生成了perlfolder.tar.gz這個文件.
那麼那個錯誤信息有意味著什麼:
tar: Removing leading `/' from member names |
這不是 錯誤 , man tar 看看關於 / 的處理? 尤其是 -P 選項. |
看了網中人大哥的解釋,我瞭解了很多,謝謝!
在我如上的問題中,確實存在大哥你說的這個錯誤,我按照你說的改了。
從邏輯上來說,這個 script應該是沒有問題了,不過真正
在運行時還是那個小問題:
$ mybackuo /root/perfolder /usr/perlfolder
tar: Removing leading `/' from member names
命令操作結束後,我卻在/usr/下看見了生成的perlfolder.tar.gz
這說明操作是成功,為什麼卻提示這個錯誤:tar: Removing leading `/' from member names
根據我的script mybackup 的要求,傳入了兩個參數:/root/perfolder /usr/perlfolder
第一個參數:/root/perlfolder是要打包和壓縮的文件夾的絕對路徑;
第二個參數:/usr/perlfolder是打包後欲生成的壓縮文件的絕對路徑和文件名前綴
我真不知道是什麼原因老是出現這個問題:tar: Removing leading `/' from member names
希望有經驗的大哥大姐們幫幫小弟! |
上述腳本現在完全可以對單個文件夾或者單個文件進行打包壓縮了,但是
卻不能使用通配符號對一個文件下的所有文件進行打包,不知道為什麼!
既不報錯,也沒有看到打包壓縮的結果,下面是我的打包壓縮script:
###############################################
# mybakup
#! /bin/bash
if [ $# -lt 2 ];then
echo "missed file name:that you want to packet or after pachect"
exit 1
fi
if [ ! -e "$1" ];then
echo "Error:no such a file or diretory:$1"
exit 1
fi
if tar -c "$1" | gzip > "$2".tar.gz ;then
echo "Opration successfully!"
exit 0
else
exit 1
fi
###############################################
比如有這樣一個文件夾/root/perl,裡面有很多以perl開頭的RPM包,我使用我的打包壓縮腳本:
$ cd /root/perl
$ mybackup perl* /usr/perl
結果就是沒有反應,也不報錯。
請幫忙看看 |
請讀13問之補充1 |
謝謝斑竹的提醒喲 |
| |