在shell脚本中使用sudo

    今天让我的ubuntu 64位 在宿舍接入了校园网,使用的依旧是xrgsu,xrgsu这个渣渣只有32位,木有64位,于是安装了32位库,安装了xrgsu,然后为了避免每次认证都要输入帐号和密码,利用expect执行认证脚本,这个脚本叫做ruijie.sh(来自西电开源wiki)。

    然而人的懒惰是无极限的。我的wlan0,也就是无线网卡每次开机的时候应该会是打开的,而且由于我还在其它地方连接其它类型的网络,比如实验室的无线网络,于是我想再写一个脚本,在执行ruijie.sh之前先根据wlan0是不是打开来做一点处理。

    很明显,要是wlan0打开的话,我需要关闭wlan0,用命令

ifconfig wlan0 down

就可以关闭。由于我是telnetning用户,所以我需要在命令前面加上sudo,像这样

sudo ifconfig wlan0 down

但是平常在tty执行的时候,会弹出"[sudo]password for telnetning:",我输入密码就能执行,但是在脚本中显然不能人工输入。顺便提一下,更改sudoers文件其实也是起不到什么作用的。首先想到的就是用expect,但是,这个,或许有更简单点的方法。

在man sudo中我们可以看到这么一段:

-S          The -S (stdin) option causes sudo to read the password from
                   the standard input instead of the terminal device.  The
                   password must be followed by a newline character.

翻译过来就是  sudo 的 -S 选项允许从stdin读入密码,那这样就好办了。

测验一下:

echo "password" | sudo -S visudo

用echo将我的password传递给sudo了,于是顺利执行。

这下就好解决我的问题了:

echo “password” | ifconfig wlan0 down

比较简单的一种方法,呵呵

posted on 2013-05-18 01:32  telnetning  阅读(8413)  评论(0编辑  收藏  举报