Tôi muốn đặt nhanh "bạn có chắc không?" nhắc xác nhận ở đầu tập lệnh bash nguy hiểm tiềm ẩn, cách dễ nhất/tốt nhất để làm điều này là gì?Tôi làm cách nào để nhắc người dùng xác nhận trong tập lệnh bash?
Trả lời
read -p "Are you sure? " -n 1 -r
echo # (optional) move to a new line
if [[ $REPLY =~ ^[Yy]$ ]]
then
# do dangerous stuff
fi
Sửa:
tôi đưa levislevis85 's gợi ý (cảm ơn!) Và thêm tùy chọn -n
-read
chấp nhận một nhân vật mà không cần phải nhấn Nhập. Bạn có thể sử dụng một hoặc cả hai.
Ngoài ra, hình thức phủ nhận có thể trông như thế này:
read -p "Are you sure? " -n 1 -r
echo # (optional) move to a new line
if [[ ! $REPLY =~ ^[Yy]$ ]]
then
[[ "$0" = "$BASH_SOURCE" ]] && exit 1 || return 1 # handle exits from shell or function but don't exit interactive shell
fi
Tuy nhiên, như đã chỉ ra bởi Erich, dưới một số trường hợp như một lỗi cú pháp gây ra bởi kịch bản được chạy trong vỏ sai, phủ nhận biểu mẫu có thể cho phép tập lệnh tiếp tục với "nội dung nguy hiểm". Chế độ thất bại nên ưu tiên kết quả an toàn nhất nên chỉ sử dụng if
đầu tiên, không được phủ nhận.
qnd: sử dụng
read VARNAME
echo $VARNAME
cho một phản ứng một dòng không nơi nương tựa readline. Sau đó, hãy thử nghiệm $ VARNAME theo ý bạn muốn.
echo are you sure?
read x
if [ "$x" = "yes" ]
then
# do the dangerous stuff
fi
Thử BUILTIN read
shell:
read -p "Continue (y/n)?" CONT
if [ "$CONT" = "y" ]; then
echo "yaaa";
else
echo "booo";
fi
#!/bin/bash
echo Please, enter your name
read NAME
echo "Hi $NAME!"
if [ "x$NAME" = "xyes" ] ; then
# do something
fi
tôi là một kịch bản ngắn để đọc trong bash và echo lại kết quả.
Điều này tôi tìm thấy ở nơi khác, có phiên bản tốt hơn có thể không?
read -p "Are you sure you wish to continue?"
if [ "$REPLY" != "yes" ]; then
exit
fi
trường hợp sử dụng/esac.
read -p "Continue (y/n)?" choice
case "$choice" in
y|Y) echo "yes";;
n|N) echo "no";;
*) echo "invalid";;
esac
lợi thế:
- gọn gàng
- có thể sử dụng "OR" điều kiện dễ dàng hơn
- có thể sử dụng nhiều nhân vật, ví dụ [YY] [eE] [sS] để chấp nhận lời "yes" , bất kỳ ký tự nào của nó có thể là chữ thường hoặc chữ hoa.
Giải pháp tốt. Cá nhân, nếu kịch bản bash thực sự có thể làm tê liệt tôi thích có người gõ 'có'. – SiegeX
Làm thế nào tôi có thể sử dụng lệnh này để thoát khi đầu vào không có (có thể là "echo" Bỏ đoạn mã. "; Exit ;;'), nhưng nếu đầu vào là có, tập lệnh sẽ tiếp tục với bất kỳ thứ gì xuất hiện sau 'esac'? –
Nếu bạn làm 'n | N), hãy trả lời" không "; return ;; 'kịch bản sẽ kết thúc ở đó nếu bạn nói 'n' và tiếp tục với phần còn lại nếu không, đó là ý của bạn? – Rellikiox
[[ -f ./${sname} ]] && read -p "File exists. Are you sure? " -n 1
[[ ! $REPLY =~ ^[Yy]$ ]] && return 1
sử dụng chức năng này để tìm tệp hiện có và nhắc trước khi ghi đè.
Trình phân tích cú pháp than phiền về hàm 'return' bên ngoài, có thể bạn có nghĩa là' thoát '. Tôi vẫn thích câu trả lời của bạn, bởi vì nó không thụt lề mã được thực hiện nếu được xác nhận. – dhill
Bằng cách này bạn sẽ có được 'y' 'có' hoặc 'Enter'
read -r -p "Are you sure? [Y/n]" response
response=${response,,} # tolower
if [[ $response =~ ^(yes|y|) ]] || [[ -z $response ]]; then
your-action-here
fi
Không chấp nhận mặc định Y –
Đối với mặc định Y nếu [[$ response = ~^(có | y |)]] | [-z $ hồi đáp]; sau đó –
Dưới đây là các chức năng tôi sử dụng:
function ask_yes_or_no() {
read -p "$1 ([y]es or [N]o): "
case $(echo $REPLY | tr '[A-Z]' '[a-z]') in
y|yes) echo "yes" ;;
*) echo "no" ;;
esac
}
Và một ví dụ sử dụng nó:
if [[ "no" == $(ask_yes_or_no "Are you sure?") || \
"no" == $(ask_yes_or_no "Are you *really* sure?") ]]
then
echo "Skipped."
exit 0
fi
# Do something really dangerous...
- Kết quả luôn là "có" hoặc "không"
- "Không" theo mặc định
- Mọi thứ ngoại trừ "y" hoặc "có" đều trả về "không", vì vậy nó khá an toàn cho tập lệnh bash nguy hiểm
- Và trường hợp không phân biệt chữ "Y", "Có" hoặc "CÓ" làm việc là "có".
Tôi hy vọng bạn thích nó,
Chúc mừng!
- 1. Tôi làm cách nào để sử dụng tập lệnh để tạo người dùng trong mongodb?
- 2. Tôi làm cách nào để nhắc người dùng từ trong móc móc cam kết?
- 3. Tôi làm cách nào để Người dùng xác nhận sự kiện thay đổi combobox trong ExtJ?
- 4. Tôi làm cách nào để tạo một lời nhắc tập lệnh mong đợi cho mật khẩu?
- 5. Tôi làm cách nào để có được tên người dùng thực thi tập lệnh Perl của mình?
- 6. Làm cách nào để gửi tín hiệu SIGINT từ tập lệnh đến tập lệnh? BASH
- 7. Làm thế nào để cung cấp mật khẩu cho một lệnh nhắc nhở một trong bash?
- 8. Làm cách nào để nhận được tên tập lệnh được thực thi trong bash?
- 9. Trong Windows cmd, làm cách nào để nhắc người dùng nhập và sử dụng kết quả trong một lệnh khác?
- 10. Làm cách nào để nhận được hg nhắc nhở tên người dùng/mật khẩu HTTP của tôi trên cygwin/windows?
- 11. Làm cách nào để tìm hiểu, người dùng nào đang chạy tập lệnh php hiện tại?
- 12. Chuyển người dùng trong tập lệnh init?
- 13. các công cụ để tạo lời nhắc dòng lệnh thân thiện với người dùng?
- 14. Làm cách nào để đặt mật khẩu người dùng trong linux từ tập lệnh python?
- 15. Mô phỏng đầu vào của người dùng trong tập lệnh bash
- 16. Làm thế nào để lập trình xác nhận người dùng trong Magento?
- 17. Làm cách nào để gỡ lỗi dấu nhắc bash?
- 18. Cách tốt nhất để chương trình C++ theo một tập lệnh do người dùng xác định?
- 19. Thay đổi thư mục tập lệnh thành homedir của người dùng trong tập lệnh shell
- 20. Cách chạy tập lệnh sau khi xác thực đăng nhập người dùng trong linux
- 21. SIGINT để hủy đọc trong tập lệnh bash?
- 22. cách thêm lời nhắc xác nhận xóa cho trường lệnh trong chế độ xem chi tiết?
- 23. Cách nhận lời nhắc lệnh uboot
- 24. Tôi làm cách nào để đăng nhập một người dùng?
- 25. Tôi làm cách nào để viết tập lệnh php tương tác dòng lệnh?
- 26. Làm thế nào để chạy lệnh với tư cách người dùng cụ thể trong tập lệnh init?
- 27. Tôi làm cách nào để truy cập cài đặt Xcode do người dùng xác định?
- 28. Chạy tập lệnh python với tư cách người dùng khác
- 29. Làm cách nào để thoát khỏi dấu gạch chéo ngược trong tập lệnh sed được nhúng trong tập lệnh bash
- 30. Làm cách nào để ẩn mật khẩu/tên người dùng được sử dụng trong tập lệnh bash để truy cập MySQL?
[Liên quan] (http://stackoverflow.com/questions/3231804/in-bash-how-to-add-are-you-sure-yn-to-any-command-or-alias) –