我在Ubuntu 17.04機器上編寫的bash腳本有一個非常奇怪的問題。Bash - if語句不自動運行
我有一個包含約人以這種方式信息的txt文件:
數名姓城市國家
有了這些相關信息我要創建一個組織系統,通過國家的作品。例如,像這樣
123阿蘭·史密斯new_york NEW_YORK
123鮑勃·史密斯水牛NEW_YORK
123查爾斯列表史密斯los_angeles CALIFORNIA
123迪恩·史密斯阿拉巴馬州墨比爾
結果在計算結束時應該有三個名爲NEW_YORK,CALIFORNIA和ALABAMA的新文件包含住在那裏的人。
該腳本將名稱列表作爲參數。我在for循環中實現了一個if語句(該條件由文件的存在性測試決定,以防萬一有更多的人處於特定狀態),奇怪的是,除非我在程序中按Enter鍵才能運行在跑。結果是正確的,我得到了正確的人在他們的文件,但它讓我感到困惑,我不得不按下輸入來使代碼工作,這對我來說沒有意義。
這裏是我的代碼:
#!/bin/bash
clear
#finding how many file lines and adding 1 to use the value as a counter later
fileLines=`wc -l addresses | cut -f1 --delimiter=" "`
((fileLines = fileLines+1))
for ((i=1; i<$fileLines; i++))
do
#if the file named as the last column already exists do not create new one
test -e `head -n$i | tail -n1 | cut -f5 --delimiter=" "`
if [ $? = 0 ]
then
head -n$i $1 | tail -n1 >> `head -n$i $1 | tail -n1 | cut -f5 --delimiter=" "`
else
head -n$i $1 | tail -n1 > `head -n$i $1 | tail -n1 | cut -f5 --delimiter=" "`
fi
done
echo "cancel created files? y/n"
read key
if [ $key = y ]
then
rm `ls | grep [A-Z]$`
echo "done"
read
else
echo "done"
read
fi
clear
什麼我錯在這裏做什麼?而且,爲什麼它沒有告訴我有什麼不對(顯然存在)?
您的'test -e'行不會從文件讀取。它從您那裏讀取。也許你想要「頭 - 我$」$ 1「'而不是? (儘管測試是不必要的:第一次不需要使用'>',當不存在時也會創建文件) –
這是行得通的嗎?你怎麼稱呼它?它看起來像是讀取標準輸入,但是......你只是想按照狀態解析文件的行嗎? –