shell脚本中使用其他用户执行脚本
a. 切换用户只执行一条命令的可以用: su - oracle -c your_command
b. 切换用户执行一个shell文件可以用:su - oracle -s /bin/bash your_shell.sh
2,在某些软件安装过程中,要创建独立用户,然后以该用户运行某些安装操作,如gitolite安装过程,创建git用户并执行安装
方法1:sudo -u user ...
sudo -u git -H <<-Code ls ~ cat test #other cmds Code 后面的相继命令在Code之前的会是以切换后的用户执行。
方法2: su
su命令
#!/bin/sh echo ~/ su - test <<HERE echo ~/ ls -al HERE echo ~/ sudo su - user1 echo #HOME echo `ls -ltr`
可以用sudo命令,它的作用是“excute a command as another user",默认为root用户,可以用 -u 指定用户名(假设要以user身份执行prog程序):sudo -u user prog
就可以了。
另一个命令su,是用另一个身份运行shell,再用新的shell运行指定程序(su只能运行在shell终端里面,虽然可以把命令写成类似sudo的样子[su -c user prog],但它的实现原理实际上还是先运行一个shell,再通过shell运行其他程序)。
http://www.shareup.me/metadocs/11197
Shell中通常将EOF与 << 结合使用,表示后续的输入作为子命令或子Shell的输入,直到遇到EOF为止,再返回到主调Shell。如下:
export NLS_LANG='SIMPLIFIED CHINESE_CHINA.ZHS16GBK'
sqlplus $USERID @$OUT_FILE << EOF
exit
EOF
当把这段代码放在Shell中时,会在Shell脚本执行完毕后自动退出SQLPLUS的命令提示符状态。
<<EOF(内容)
EOF
可以把EOF替换成其他东西,意思是把内容当作标准输入传给程序。这里再简要回顾一下< <的用法。当s h e l l看到< <的时候,它就会知道下一个词是一个分界符。在该分界符以后的内容都被当作输入,直到s h e l l又看到该分界符位于单独的一行)。这个分界符可以是你所定义的任何字符串。提示,最好在行首,不要加空格。
方法1.需要,自动登录mysql(root:root,passwd:123456),查询test库,test1表里的user=aa的记录.
#!/bin/sh
mysql -uroot -p123456 <<EOF
use test;
select * from testaa while a=10000; ###1000 not usr single quote mark,because a is int
# type,only char type need single quote mark.
exit
EOF
方法2:用expect脚本
expect用法:参考 http://www.cnblogs.com/iloveyoucc/archive/2012/05/11/2496433.html
开机自启动可以将脚本放到/etc/rc.d目录下的rc.local中即可
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)