当shell脚本的输入带有某些特殊字符时,变量的处理要特别小心,单引号,双引号的使用等等。由于前段时间要被密码输入搞疯掉了(sed 遇到&符时),所以这里博主写了一个shell函数,可以将特殊字符串转成16进制表示,方便一些特殊处理,算是提供一种思路吧!
codec_pass(){
CODE_PASS=$1
HEX_PASS=""
CODE_PASS=$(echo -n "$CODE_PASS" | od -A n -t x1)
for ps in $CODE_PASS # Add \x during loop
do
if [ $ps = "5c" ];then # Add additional \ if met \
HEX_PASS=$HEX_PASS\\x5c\\x$ps
elif [ $ps = "26" ];then # Add additional \ if met &
HEX_PASS=$HEX_PASS\\x5c\\x$ps
else # Just add \x
HEX_PASS=$HEX_PASS\\x$ps
fi
done
}
如果输入是
•
abC
~`!@#$%^&*()-+?\|
321
则输出是
•
\x61\x62\x43\x7e\x60\x21\x40\x23\x24\x25\x5e\x26\x26\x2a\x28\x29\x2d\x2b\x3f\x5c\x5c\x7c\x33\x32\x31
需要还原成字符串?利用
echo -e
就可以了。
欢迎各路大牛指点!