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中即可