Điểm:0

Câu lệnh tiếp tục không hoạt động như bình thường - bash

lá cờ cn

Đối với bối cảnh, tôi có cơ sở hạ tầng gồm nhiều máy sử dụng ssh. Chúng tôi kết nối qua ssh với tư cách là người chủ trên các máy mà không cần mật khẩu nhờ vào tệp ủy quyền trên mỗi mchine. Chúng tôi thường xuyên bổ sung các máy mới trong cơ sở hạ tầng của mình.

Vấn đề là tạo một tập lệnh:

  1. Ping tất cả máy (bằng cách phân tích cú pháp qua tệp chứa tất cả tên máy của chúng tôi)
  2. Nếu ping thành công, Kiểm tra kết nối ssh mà không cần mật khẩu (bằng lệnh ssh -o BatchMode=yes $machine uname -a )
  3. Nếu ssh không hoạt động VÀ đó là do thông báo này: Bạn có chắc chắn muốn tiếp tục kết nối (có/không)? (vì đó là kết nối ssh đầu tiên với máy này chẳng hạn), sau đó với một tập lệnh mong đợi, hãy gửi "có"
  4. Nếu ssh không hoạt động VÀ đó là do mật khẩu được hỏi, thì với một tập lệnh mong đợi, hãy gửi "CTRL + C"

Vấn đề của tôi là cả hai điều kiện 3. và 4. đều có thể xảy ra với một máy và tôi không thể tìm ra cách sử dụng câu lệnh continue trong tập lệnh của mình.

Trường hợp cụ thể này sẽ dành cho một máy yêu cầu "có" nhưng sau đó cũng yêu cầu mật khẩu.

Đây là những gì kịch bản trông giống như:

cho máy trong `cat ${liste} | grep -v \#`
làm

ping -c1 ${machine} 2>&1 >/dev/null

nếu [ $? -eq 0 ]
sau đó
    tiếng vang ${machine} >> ${pingok}    
    ssh -o BatchMode=yes ${machine} uname -a &> $verifssh 2>&1    
    tiếng vang $? > ${mã thoát}
    
    nếu grep -q "255" "$exitcode"
    sau đó        
        cắt -c 15-74 $verifssh > $verifssh2
                
        nếu grep "ication không thành công." "$verifssh2"        
        sau đó                
            mong đợi ${scriptexpectknownhosts} ${machine} 2>&1 >/dev/null
            
            tiếp tục 3 
                        
        elif grep "Quyền bị từ chối (khóa công khai, mật khẩu, tương tác bàn phím)." "$verifssh2"        
        sau đó        
            mong đợi ${scriptexpectknownhosts} ${machine} 2>&1 >/dev/null            
            echo "${machine} -> Máy hỏi mật khẩu" >> "${sshnok}"           
        fi
                
    elif grep -q "0" "$exitcode"   
    sau đó   
        tiếng vang "${machine} hoạt động với ssh"
        tiếng vang "${machine}" >> ${sshok}               
    fi
    
khác
    tiếng vang "${machine}" >> "${pingnok}"     
fi

xong

Đây là kịch bản mong đợi (nó xử lý cả hai tình huống):

đặt máy [lindex $argv 0]

sinh ra ssh $machine

chờ đợi {
    "Bạn có chắc chắn muốn tiếp tục kết nối (có/không) không?" {send "yes\r";exp_continue}
    -chính xác "Mật khẩu:" {đóng}
    -re $prompt {gửi "thoát\r";đóng}
}

Vì vậy, tóm lại, vấn đề của tôi là, đối với máy yêu cầu câu trả lời "có" và sau đó cần mật khẩu, tôi muốn đăng ký chúng trong ${sshnok} tập tin nhưng tiếp tục không hoạt động. tôi đã thử tiếp tục / tiếp tục 2 / tiếp tục 3 và nó vẫn không muốn quay lại vòng lặp trước đó.

Archemar avatar
lá cờ mx
Không chắc chắn những gì bạn mong đợi (không có ý định chơi chữ), `tiếp tục` sẽ thoát khỏi một vòng lặp (trong trường hợp này, nó chỉ có thể thoát toàn cầu `cho máy trong ... `)
lá cờ cn
Cảm ơn câu trả lời của bạn, tôi đã hiểu nhầm cách sử dụng continue rồi, có cách nào để tôi có thể yêu cầu tập lệnh thực hiện lại vòng lặp từ lần đầu tiên hoặc lần thứ hai nếu không?
lá cờ fo
Có phải [câu trả lời bạn nhận được trên stackoverflow ngày hôm qua](https://stackoverflow.com/q/71658273/7552) không trả lời câu hỏi này?
Archemar avatar
lá cờ mx
thả `tiếp tục` và thay thế `elif` bằng `fi if` theo sau?
Điểm:0
lá cờ cn

Như được đề xuất trong một nhận xét, tôi đã bỏ tiếp tục và thay vì nhiều yêu tinh tôi vừa làm thêm nếu các câu lệnh :

cho máy trong con mèo ${liste} | grep -v \#

làm

tiếng vang "."

ping -c1 ${machine} 2>&1 >/dev/null


nếu [ $? -eq 0 ]

sau đó

    
    tiếng vang ${machine} >> ${pingok}
    
    ssh -o BatchMode=yes ${machine} uname -a &> $verifssh 2>&1 
    
    tiếng vang $? > ${mã thoát}
    
    
    nếu grep -q "255" "$exitcode"
    
    sau đó
    
    
        cắt -c 15-74 $verifssh > $verifssh2
        
        
        nếu grep "ication không thành công." "$verifssh2"
        
        sau đó 
        
        
            mong đợi ${scriptexpectknownhosts} ${machine} 2>&1 >/dev/null
            

        fi
        
        
        ssh -o BatchMode=yes ${machine} uname -a &> $verifssh 2>&1
        
        cắt -c 15-74 $verifssh > $verifssh2
        
        
        nếu grep "Quyền bị từ chối (khóa công khai, mật khẩu, tương tác bàn phím)." "$verifssh2"
        
        sau đó
        
        
            mong đợi ${scriptexpectknownhosts} ${machine} 2>&1 >/dev/null
            
            echo "${machine} -> Vấn đề về ssh (yêu cầu một mdp)" >> "${sshnok}"
            
            
        fi
        
        
        ssh -o BatchMode=yes ${machine} uname -a &> $verifssh 2>&1
        
        tiếng vang $? > ${mã thoát}
        
        
        nếu grep -q "0" "$exitcode"
        
        sau đó
        
        
            tiếng vang "${machine}" >> ${sshok}
            
            
        fi
        
        
    elif grep -q "0" "$exitcode"
    
    sau đó
    
    
        tiếng vang "${machine}" >> ${sshok}
        
        
    elif grep -q "1" "$exitcode"
    sau đó
    
    
        tiếng vang "wtf 1"
        
        
    fi
    
    
khác


    tiếng vang "${machine}" >> "${pingnok}"
    
    
fi


xong

Cảm ơn bạn rất nhiều cho tất cả các câu trả lời!

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.