2011-02-05 160 views
0

我正在嘗試編寫一個Unix Shell腳本,它在執行時要求用戶輸入4個數字,腳本將它們按數字排序並打印出來。在Unix Shell腳本中排序輸入

我該怎麼做?

感謝你的幫助,

安迪

+1

氣味像功課 – 2011-02-06 00:41:08

+0

是寫一個簡單的排序分配程序,或者你可以使用'sort`效用?你試過什麼了?儘管問這個問題有點晚。 – 2011-02-06 00:47:32

+0

謝謝你,是的丹尼斯我堅持這個作業和一種困惑,但現在它的罰款:-) – Andy 2011-02-06 11:00:59

回答

1

您可以使用「排序」工具,它從標準輸入讀取和lexicographycally排序每一行。

舉個例子,你可以檢查:

echo -e "1\n6\n2\n3" | sort -n 

,輸出:

1 
2 
3 
6 

只輸出每個數字在單獨一行,並通過管道將進入排序

+0

你應該提到排序的'-n`選項,因爲問題是關於**數字**排序。 – 2011-02-05 23:27:05

+0

你是對的!忘了那個... – mfontanini 2011-02-06 01:00:21

4

假設你的投入在$a,$b,$c, $d你可以這樣做

printf "%s\n%s\n%s\n%s\n" $a $b $c $d | sort 
1

您需要讀取這些值,然後將它們回顯到排序程序。

echo -n "Enter 1st number: " 
read a junk 
echo -n "Enter 2nd number: " 
read b junk 
echo -n "Enter 3rd number: " 
read c junk 
echo -n "Enter 4th number: " 
read d junk 
{ echo $a; echo $b; echo $c; echo $d; } | sort -n 

這裏唯一的問題是用於在echo命令後面抑制換行符的符號。有兩種符號 - 不同的系統使用不同的符號。較舊的符號是所示的echo -n。較新的符號是:

echo "Enter Nth number: \c" 

您需要使用哪個取決於您的系統。

「垃圾」變量收集輸入行上第一個單詞之後的任何額外單詞。這是一種偏執狂,但意味着如果用戶鍵入'12 abc',那麼單字母變量只會得到'12',而不是其他的。該代碼不驗證用戶輸入了一個數字。你可以編寫一個函數來做到這一點,並使用它4次 - 它可能會採取提示字符串並返回一個數字。

請注意,如果您使用bash,該read命令更加強大,可以在readecho符號的非便攜式(爲除bash)做了提示,以及,邊踩着棘手的問題,而不是符號。除了echo表示法外,所顯示的代碼可移植到Bourne shell返回到第7版(或第7版)UNIX(其中echo不是內置的shell,它使用-n選項)和衍生產品(Korn,Bash,POSIX, ...)。

3

另一種方式

read -p "Enter 1st number: " a 
read -p "Enter 2nd number: " b 
read -p "Enter 3rd number: " c 
read -p "Enter 4th number: " d 
printf "%s\n" $a $b $c $d | sort