shell指令碼中使用其他使用者執行指令碼

2022-03-20 09:04:43 字數 1542 閱讀 9025

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 《可以用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執行其他程式)。

shell中通常將eof與 << 結合使用,表示後續的輸入作為子命令或子shell的輸入,直到遇到eof為止,再返回到主調shell。如下:

export nls_lang='simplified chinese_china.zhs16gbk'

sqlplus $userid @$out_file << eof

exit

eof當把這段**放在shell中時,會在shell指令碼執行完畢後自動退出sqlplus的命令提示符狀態。

《可以把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在shell中:

$0: 獲取當前指令碼的名稱

$#: 傳遞給指令碼的引數個數

$$: shell指令碼的程序號

$1, $2, $3...:指令碼程式的引數

方法2:用expect指令碼

expect用法:參考 

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

其他使用者操作

使用者連線方式 mysql user 使用者名稱 password 密碼 資料庫名 mysql u 使用者名稱 p 資料庫名 mysql u 使用者名稱 p密碼 資料庫名 注 p和密碼中間無空格,u和使用者名稱之間也可以無空格 設定使用者資源限制 建立並設定 mysql create user 使用...

linux 其他使用者工具命令

其他使用者工具命令 userdel 刪除使用者,預設情況下userdel命令只會刪除 etc passwd檔案中的使用者資訊,而不會刪除系統中屬於該帳戶的任何檔案 加 f引數,無論此使用者是否正在登入,都乾掉,加 r引數刪除此使用者的home目錄和mail目錄,其他需要手動刪除。usermod命令 ...

linux 其他使用者密碼失效

雲機器或者說linux機器,其新建使用者密碼的有效期預設是180天,可以在 etc login.defs中檢視pass max days變數,預設是180天,並且執行chage m days user生效。llt安全集群安裝過程中,使用ant進行ssh執行命令,不光使用了securedn 使用者,還...