2,在某些軟體安裝過程中,要建立獨立使用者,然後以該使用者運行某些安裝操作,如gitolite安裝過程,建立git使用者並執行安裝
方法1:sudo -u user ...
sudo -u git -H <<-Codels ~cat test#other cmdsCode
後面的相繼命令在Code之前的會是以切換後的使用者執行。
方法2: su
su命令
#!/bin/sh echo ~/ su - test <<HERE echo ~/ ls -al HERE echo ~/sudo su - user1echo #HOMEecho `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中即可