嗨我有一項任務,需要用戶輸入他們的出生日期。 從一開始,我需要讓用戶輸入他們的出生日期。 假設輸入的日期是「20050215」,我怎樣才能將它分成3個參數? (2005年02月15日) 我還需要爲用戶有其他選項輸入這樣的生日 「-y 2005 -m 02 -d 15」 請幫助我。 您的幫助將不勝感激。將日期分成3個參數的Bash shell腳本?
-2
A
回答
3
Bash提供出色的字符串索引,讓您只需做你的需要:
bdate=20050215
year=${bdate:0:4}
mon=${bdate:4:2}
day=${bdate:6:2}
格式爲${var:start:length}
如果你需要從年底抵消,那麼你要麼離開空格開始之前(例如${var: -2:1}
旁邊的最後一個字符),或者將括號中的負偏移量括起來(例如${var:(-2):1}
- 對於最後一個字符旁邊的相同)。
您可以創建一個小的腳本,需要輸入沒有太大的問題:
#!/bin/bash
printf "enter birthdate (yyyymmdd): "
read bdate
[ "${#bdate}" -ne "8" ] && {
printf "error: invalid length of date entered.\n"
exit 1
}
[[ ${bdate} =~ [^0-9] ]] && {
printf "error: non digit in date entered.\n"
exit 1
}
year=${bdate:0:4}
mon=${bdate:4:2}
day=${bdate:6:2}
printf "date entered: %s\n\n" "$bdate"
printf " year : %s\n" "$year"
printf " month : %s\n" "$mon"
printf " day : %s\n\n" "$day"
示例使用/輸出
$ bash ymd_split.sh
enter birthdate (yyyymmdd): 20050215
date entered: 20050215
year : 2005
month : 02
day : 15
$ bash ymd_split.sh
enter birthdate (yyyymmdd): 1234567
error: invalid length of date entered.
$ bash ymd_split.sh
enter birthdate (yyyymmdd): 1234567a
error: non digit in date entered.
0
因爲你不想自己驗證日期(即閏年),您應該使用date
。
bdate=20160229
d=$(date --date="$bdate" +%d)
m=$(date --date="$bdate" +%m)
y=$(date --date="$bdate" +%Y)
+0
爲什麼要三個單獨的日期調用,而不是僅僅在用'read'來分割結果?即。 'read d m y <<(date -d「$ bdate」'+%d%m%y')''。效率更高;執行外部呼叫*費用很高* –
+0
...如果您保證bash 4.3,它可以做得更好,它在'printf'中內置了'strftime'支持。 –
相關問題
- 1. bash,shell腳本參數跳過腳本的一部分
- 2. Shell腳本日期
- 3. 分析shell腳本參數
- 4. (已保存)bash shell腳本參數「\」
- 5. 將bash腳本的echo參數分成不同的行
- 6. bash shell腳本:如何將參數列表分組爲N個項目?
- 7. Bash/Shell腳本
- 8. shell腳本BASH
- 9. Bash shell腳本
- 10. Shell腳本比較日期
- 11. shell腳本日期算法
- 12. Bash shell腳本,只用腳本的某個部分運行&
- 13. BASH腳本按日期
- 14. Bash腳本,比如日期?
- 15. shell腳本的空格分隔參數
- 16. shell腳本:用日期解析秒數
- 17. bash shell腳本爲最後一週的日期
- 18. bash腳本中的參數分組
- 19. bash腳本參數
- 20. Bash腳本參數
- 21. Bash腳本參數
- 22. shell腳本生成帶日期戳記的新日誌
- 23. bash shell腳本顯示分段錯誤
- 24. 將C#中的兩個參數(日期)傳遞給python腳本
- 25. shell腳本中的參數
- 26. 的Bash shell腳本變量
- 27. 的Bash shell腳本回答
- 28. 將參數傳遞給期望和SSH的bash腳本
- 29. 在bash中定義一個沒有shell腳本的shell函數?
- 30. AIX shell腳本中的日期操作
非常感謝,您的建議確實有幫助。讚賞:) –
當然,很高興我能幫上忙。現在確保你理解這一切,如果你有問題,就問。這些測試就是所謂的*複合命令*。它們被用作上面的一個簡短的'if'(它只是節省了編寫整個'if if else fi'。確保你理解'['和'[[''條件語句之間的區別,當引用是/在他們內部是不需要的,等等。在短小的腳本中有很多事情要做。祝你好運,你的腳本.bash,zsh等腳本是一種非常有用的編程形式。 –
是的,我是對於這件事來說,這是一個相當新的東西,所以我沒有完全理解這個概念,但是我很高興你能幫上忙,最好的祝願 –