我正在尝试在 Linux 服务器中执行一个命令来获取所有服务器都需要重置 root 密码,因为有多个服务器我正在使用期望脚本来自动化它,我的命令包含特殊字符,例如双引号和重音符号`
。因此在执行时它会在双引号后给出额外的字符作为错误。
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
如果你想要一个没有插值的字符串铊(expect 使用的语言),并且它没有{}
要扩展的字符或变量,然后将其括在{}
.例如:
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
太早解析它。