모든 서버에서 루트 비밀번호를 재설정해야 하는 명령을 실행하려고 Linux 서버에서 명령을 실행하려고 합니다. 자동화하기 위해 예상 스크립트를 사용하는 서버가 여러 개 있기 때문에 명령에는 큰따옴표 및 악센트와 같은 특수 문자가 포함되어 있습니다 `
. 따라서 실행하는 동안 큰따옴표 뒤에 추가 문자가 오류로 표시됩니다.
send " chage -l root | grep -i "Password expires" | if [[ `awk -F : '{print $2}' ` = "never" ]] ; then echo "password needs to be changed " ;else echo "skipping reset " ; fi;\r"
큰따옴표를 사용해 보았지만 \
오류는 동일합니다.
답변1
보간 없이 문자열을 원하는 경우탈륨{}
(예상되는 언어가 있음) 확장할 문자나 변수가 없으면 다음 {}
과 같이 묶습니다.
send { chage -l root | grep -i "Password expires" | if [[ `awk -F : '{print $2}' ` = "never" ]] ; then echo "password needs to be changed " ;else echo "skipping reset " ; fi;}
send \r
답변2
백슬래시를 어디에 넣었나요? 모든 참조에 적용됩니까, 아니면 이와 같은 내부 참조에만 적용됩니까?
send " chage -l root | grep -i \"Password expires\" | if [[ `awk -F : '{print \$2}' ` = \"never\" ]] ; then echo \"password needs to be changed \" ;else echo \"skipping reset \" ; fi;\r"
예, 해당 문자열이 명령에 전달되고 너무 일찍 구문 분석할 필요가 없으므로 문자가 \
하나 더 필요합니다 .$
bash