shell脚本中怎样对特殊字符进行处理 一串密码在加密前对密码中的!@#$%等特殊字符进行处理(加上‘’)。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell脚本中怎样对特殊字符进行处理 一串密码在加密前对密码中的!@#$%等特殊字符进行处理(加上‘’)。相关的知识,希望对你有一定的参考价值。

在shell脚本中 密码加密工具不支持直接对像(Aa123!@#$)这样儿的密码进行加密,只能对(Aa123‘!''@''#''$')特殊字符加个单引号或双引号才能加密成功。求大神们帮忙,我不知道怎么让给密码中的特殊字符中上引号。

用sed正则匹配全局替换:

echo 'Aa123!@#$' | sed "s/[^0-9a-zA-Z]/'&'/g"

这样就把不是字母或数字的其他字符都加上单引号啦

当然,如果原输入中不存在特殊字符,就还是原样输出,不会做任何改变。

追问

在liunx下!@使用这条命 令不行啊,会把!@这俩给干掉了,要么就执行失败。现在问题已经用别的方式解决了,不过你的回答很好 ,长知识 了谢谢 分给得。

追答

!@也是可以的:

echo '!@' | sed "s/[^0-9a-zA-Z]/'&'/g"

echo 的时候需要用单引号,因为单引号会屏蔽一切特殊含义,只当做字符本身来解释。

参考技术A 你是怎么解决的啊 参考技术B ‘Aa123!@#$’追问

早试过了 不行。

在expect里面怎样send一串含有特殊字符的字符串

  expect其实就是产生两个进程,一个模拟用户(expect进程本身),一个执行命令(spawn语句产生的进程)。send就是模拟用户在console下输入字符串,我们输入命令都要回车的,相应的send的字符串要用\r结束。脚本里的expect语句相当于用户等待命令输出以确定接下来输入什么命令。      特殊字符转义不好解释,看Exploring Expect吧。好像有一个笨办法是,send每个特殊字符前面都加上\就可以了,expect每个特殊字符前面加上\\\。      send "\$ax\[sdf\]\@\#\r"   expect "\\\r\\\n 参考技术A 苦逼你好,这个帖子放到这没人回答,还好我自己找到了答案,我把答案写在这里等待下一个苦逼降临,希望你们能少走一点弯路。

1. expect是基于tcl演变而来的,所以很多语法和tcl类似,基本的语法如下所示:
1.1 首行加上/usr/bin/expect
1.2 spawn: 后面加上需要执行的shell命令,比如说spawn sudo touch testfile
1.3 expect: 只有spawn执行的命令结果才会被expect捕捉到,因为spawn会启动一个进程,只有这个进程的相关信息才会被捕捉到,主要包括:标准输入的提示信息,eof和timeout。
1.4 send和send_user:send会将expect脚本中需要的信息发送给spawn启动的那个进程,而send_user只是回显用户发出的信息,类似于shell中的echo而已。

2. 一个小例子,用于linux下账户的建立:
filename: account.sh,可以使用./account.sh newaccout来执行;

1 #!/usr/bin/expect
2
3 set passwd "mypasswd"【这个是你设置的密码】
4 set timeout 60
5
6 if $argc != 1
7 send "usage ./account.sh \$newaccount\n"
8 exit
9
10
11 set user [lindex $argv [expr $argc-1]]
12
13 spawn sudo useradd -s /bin/bash -g mygroup -m $user
14
15 expect
16 "assword"
17 send_user "sudo now\n"
18 send "$passwd\n"
19 exp_continue
20
21 eof
22
23 send_user "eof\n"
24
25
26
27 spawn sudo passwd $user
28 expect
29 "assword"
30 send "$passwd\n"
31 exp_continue
32
33 eof
34
35 send_user "eof"
36
37
38
39 spawn sudo smbpasswd -a $user
40 expect
41 "assword"
42 send "$passwd\n"
43 exp_continue
44
45 eof
46
47 send_user "eof"
48
49

以上是关于shell脚本中怎样对特殊字符进行处理 一串密码在加密前对密码中的!@#$%等特殊字符进行处理(加上‘’)。的主要内容,如果未能解决你的问题,请参考以下文章

linux变量里有特殊字符脚本会对其处理吗

SHELL脚本之字符串大截取取与切割

shell脚本入参包含感叹号怎么处理

shell脚本 都有哪些特殊字符不支持

shell脚本或R脚本中参数含有空格的处理方法

shell脚本扩展