Tôi đang chạy một tập lệnh dựa trên mạng đang hoạt động và chia sẻ mạng được gắn kết. Kịch bản chạy khi đăng nhập (xảy ra tự động sau khi khởi động). Vấn đề là vào thời điểm tập lệnh chạy, tôi thường chưa có địa chỉ IP (DHCP). Hiện tại tôi chỉ ngủ kịch bản trong 15 giây, nhưng tôi hoàn toàn không thích cách tiếp cận này, vì tôi muốn có thể nói với người dùng nếu có gì đó không đúng.
Kế hoạch của tôi là gì, là vòng lặp trong khi tôi chưa có địa chỉ IP và tiếp tục khi tôi làm. Điều quan trọng, nó phải hết thời gian sau một thời gian. Những gì tôi đã đưa ra là if [ ifconfig | grep "192.168.100" ];
nhưng những gì xảy ra là grepconsume ];
và không thích nó. Sau đó, bash cũng buồn bã, bởi vì nó không thể tìm thấy ];
grep nào đã ăn. Và sau đó tôi thậm chí còn không thực hiện được thời gian chờ.
Ai đó đề nghị giữ một biến và ngủ, giả sử, một giây trong mỗi lần lặp và tăng biến này mỗi lần. Đây là kịch bản hoàn chỉnh (không hoạt động) của tôi (Tôi khá mới đối với kịch bản bash):
x=0
while [ ifconfig | grep "192.168.100." > /dev/null ]; do
echo "no nework"
if "$x" -gt 200; then
#Time out here
exit 1
x=$((x+1))
sleep .1
fi
done
#continue with rest of script...
Bất kỳ con trỏ đi đúng hướng sẽ được đánh giá rất cao!
grep
đầu ra /dev/null
. Sử dụng -q
tùy chọn thay thế. Và tôi cũng không nên grepping ifconfig là một ý tưởng tốt. Tại sao không sử dụng ping
thay thế?
ping
có thể thất bại tùy thuộc vào mạng trong câu hỏi. Tốt hơn hết là chỉ kiểm tra cấu hình đang chạy của hệ thống.
network-online.target
...