shell腳本中使用其他用戶執行腳本


1,用su,當我們需要以其他身份執行 command,或者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

 

在shell中:
$0: 獲取當前腳本的名稱
$#: 傳遞給腳本的參數個數
$$: shell腳本的進程號
$1, $2, $3...:腳本程序的參數  

方法2:用expect腳本

 expect用法:參考 http://www.cnblogs.com/iloveyoucc/archive/2012/05/11/2496433.html

 開機自啟動可以將腳本放到/etc/rc.d目錄下的rc.local中即可

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM