1
我寫一個簡單的腳本爲用戶在--:--:--:--:----
(即10:46:02:17:2017
)格式輸入一個特定的時間。我想顯示空白字段,讓光標從左側開始並從左向右移動,並用用戶輸入的數字替換-
。bash腳本 - 如何創建時間輸入欄
這怎麼可能最好在bash腳本實現?
我寫一個簡單的腳本爲用戶在--:--:--:--:----
(即10:46:02:17:2017
)格式輸入一個特定的時間。我想顯示空白字段,讓光標從左側開始並從左向右移動,並用用戶輸入的數字替換-
。bash腳本 - 如何創建時間輸入欄
這怎麼可能最好在bash腳本實現?
像這樣的東西應該讓你在正確的方向前進:記住
#!/bin/bash
my_var='';
printf "\r--:--:--:--:----\r";
while [ ${#my_var} -lt 12 ]; do
read -s -n 1 this_char;
if [ "$this_char" = " " ]; then
this_char=0;
fi;
if [[ "$this_char" =~ [0-9] ]]; then
my_var="$my_var$this_char";
fi;
hour="${my_var:0:2}"
min="${my_var:2:2}"
month="${my_var:4:2}"
day="${my_var:6:2}"
year="${my_var:8:4}"
printf -v my_output "\r%-2s:%-2s:%-2s:%-2s:%-4s" $hour $min $month $day $year;
my_output=${my_output// /-}
printf "%s" "$my_output"
output_length=${my_output%%-*}
output_length=${#output_length}
num_go_back=$((17 - ${output_length}))
for ((i=1; i<=$num_go_back; i++)); do
printf "\b";
done;
done;
echo
echo "hour: $hour"
echo "min: $min"
echo "month: $month"
echo "day: $day"
echo "year: $year"
飼養,這可能不是最好的主意,因爲它是不是在命令提示符下正常的接口。您需要編輯循環以確保用戶輸入數字,並且您需要檢查字段是否爲空,並用短劃線替換它們。
借調:「...這可能不是最好的主意,因爲它是不是在命令提示符下正常的接口。」 –
爲什麼'seq'(一個非標準的命令不包含在shell中),與C風格的'for for循環支持相反(保證存在於bash中,無論如何你需要爲'[[$ foo =〜〜bar] ]'?我還強烈建議'printf%s「$ my_output」'而不是'echo -n $ my_output' - echo -n的行爲是[implementation-defined](http:// pubs。 opengroup.org/onlinepubs/9699919799/utilities/echo.html)。我也會考慮'printf -v my_output ...'和'my_output = $ {my_output ///- }'以避免子shell開銷 - 並且當然,你不帶引號的擴展應該被引用 –
在不同的音符 - POSIX指定有意義的OS和外殼,並保留應用程序使用小寫名稱變量全部大寫的名稱;請參閱http://pubs.opengroup。 org/onlinepubs/9699919799/basedefs/V1_chap08.html,第四段 –