原帖地址:网址
项目地址,欢迎 star,github 主页或私信反馈:
https://github.com/leitbogioro/Tools
主贴里有若干坛友反馈,脚本安装时,通过 -pwd '自定密码内容' 输入后,系统装好后再 ssh 机器,显示密码不对。这个问题我进行了一番调查,现在已得到结果,现将问题原因和解决方法告诉大家。
原因:Linux shell 语言对变量中的字符要求非常严格,诸如表示变量的美元符号——"$"、表示强引用,不把其中被括起来的文本内容当命令或变量处理的的单引号——" ' ",本次密码设置问题就出在单引号上,我们通过简单的例子就能知道问题出在哪。
只输出被单引号括起来的字符,结果没什么好说的,单引号不会出现:
[ol][email protected]:~# echo 'xiaoming'
xiaoming[/ol]复制代码
这时我想输出带单引号的结果,如 'xiaoming' ,给前后单引号各再加一个单引号,显然不行:
[ol][email protected]:~# echo ''xiaoming''
xiaoming[/ol]复制代码
解决办法是什么呢?很简单,用 '\' 当做转义符,附在需要输出的单引号 ' 前,这样结果里单引号 ' 就能正常出现:
[ol][email protected]:~# echo ''\''xiaoming'\'''
'xiaoming'[/ol]复制代码
也就是说,如果是以字符串的形式,向 shell 的变量里存储值,'\'' 的作用就是可以让变量里正确存入单引号 ' 的值,前提是该变量中的值前后已经被单引号括起来,我们可以在任何地方插入我们需要的单引号,只要以 '\'' 输入即可,比如我们需要输出 xi'aom'ing:
[ol][email protected]:~# echo 'xi'\''aom'\''ing'
xi'aom'ing[/ol]复制代码
又比如我们需要输出 x'iao'ming
[ol][email protected]:~# echo 'x'\''iao'\''ming'
x'iao'ming[/ol]复制代码
所以一定要记住,使用脚本自定义密码,除了要把密码整个用单引号括起来: -pwd '密码内容' ,如果密码中带有英文单引号('),每个单引号前都必须加上被一对新的单引号括起来的斜杠转义,才能被 shell 正确识别为一个纯文本的单引号,否则 shell 会自动忽略掉你设置密码中间带的所有单个单引号,所以才造成密码设置错误,敬请注意!以下这个才对应正式密码中带的一个单引号字符!
[ol]'\''[/ol]复制代码