Ⅰ linux命令行下,怎麼關閉正在執行的bash腳本
工具:
win10
win10系統開啟linux
bash命令行方法如下:
1、首先將win10系統升級到最新的build
14316,然後到系統設置——更新和安全——針對開發人員——選擇開發者模式。
2、然後系統搜索「程序和功能」,選擇「開啟或關閉windows功能」,開啟windows
subsystem
for
linux
(beta),並重啟系統。
3、安裝bash,需要開啟命令行模式,然後輸入「bash」,即可使用。
Ⅱ Bash 教程六章
引號是在任何編程語言中引用字元串的標准做法。引號用於處理帶有空格字元的文本、文件名。閱讀本教程以了解單引號和雙引號之間的區別。
上面腳本會輸出
shell 變數擴展僅適用於雙引號。如果您在單引號中定義任何變數將不起作用。
上面腳本會輸出
Bash 腳本提供了在運行時調試腳本的選項。您在 shell 腳本中使用「set -xv」命令或在執行腳本時在命令行上使用 -xv。
執行以下命令
退出代碼是一個介於 0 和 255 之間的數字。這是子進程完成後返回給父進程的值。換句話說,它表示我們函數的最後一個命令的退出狀態。
基於命令或程序返回的退出代碼值將成功執行或不執行。
編寫程序在 /tmp/test.txt 文件中寫入一些內容並檢查命令執行成功與否。
編寫一個程序來搜索文件中的字元串並檢查字元串是否存在。
以上代碼會輸出
Ⅲ shell 腳本中調用history命令,代碼是這樣, #!/bin/bash # history 退出執行該腳本,無輸出
您好,默認情況下 腳本中history是無法執行得
3.set -o查看是否開啟
1)在互動式查看
[root@py-centos7 ~]# set -o |grep history
history on
2)在腳本里查看
[root@py-centos7 ~]# sh a.sh
history off
腳本內容:
##! /bin/sh
HISTFILE=~/.bash_history
set -o |grep history
4.set -o 命令 打開bash的history配置
腳本內容
##! /bin/sh
HISTFILE=~/.bash_history
set -o history
history
Ⅳ 在bash腳本中使用top命令後如何退出
只能使用top自己的-n參數來控制執行的次數。
比如你要讓top執行2次後自行退出,就是:
top -n 2
Ⅳ ubuntu開機和登陸後自動運行哪些腳本程序
1.開機啟動時自動運行程序
Linux 載入後, 它將初始化硬體和設備驅動, 然後運行第一個進程init。init根據配置文件繼續引導過程,啟動其它進程。通常情況下,修改放置在 /etc/rc或 /etc/rc.d 或 /etc/rc?.d 目錄下的腳本文件,可以使init自動啟動其它程序。例如:編輯 /etc/rc.d/rc.local 文件(該文件通常是系統最後啟動的腳本),在文件最末加上一行「xinit」或「startx」,可以在開機啟動後直接進入X-Window。
開機後還要自動運行很多服務,如mysql,memcache等。
2.登錄時自動運行程序
用戶登錄時,bash首先自動執行系統管理員建立的全局登錄script :/ect/profile。然後bash在用戶起始目錄下按順序查找三個特殊文件中的一個:/.bash_profile、/.bash_login、 /.profile,但只執行最先找到的一個。 因此,只需根據實際需要在上述文件中加入命令就可以實現用戶登錄時自動運行某些程序(類似於DOS下的Autoexec.bat)。
注意不是自動運行.bashrc腳本,而是.profile腳本。
可以看看源碼.profile:
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
,.. "$HOME/.bashrc"
fi
fi
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
可以看出,我們平時使用的.bashrc文件,僅僅是被.profile腳本載入的。
所以很多同學默認是zsh會導致純粹按照某些文章指示編寫.bashrc腳本的環境變數不起作用,比如使用rvm的。
3.退出登錄時自動運行程序
退出登錄時,bash自動執行個人的退出登錄腳本/.bash_logout。例如,在/.bash_logout中加入命令「tar -cvzf c.source.tgz *.c」,則在每次退出登錄時自動執行 「tar」 命令備份 *.c 文件。
4.定期自動運行程序
Linux有一個稱為crond的守護程序,主要功能是周期性地檢查 /var/spool/cron目錄下的一組命令文件的內容,並在設定的時間執行這些文件中的命令。用戶可以通過crontab 命令來建立、修改、刪除這些命令文件。
例如,建立文件crondFile,內容為「00 9 23 Jan * HappyBirthday」,運行「crontab cronFile」命令後,每當元月23日上午9:00系統自動執行「HappyBirthday」的程序(「*」表示不管當天是星期幾)。
因為.bashrc或者說.profile文件是在登錄時才執行的,如果不登陸能執行么,或者說如果要運行服務怎麼辦,此時並沒有某個用戶登陸,也就麽有相應的環境變數了。
比如啟動rails的服務的www用戶。
使用sudo命令的參數-i
查看manue:
-i [command]
The -i ( simulate initial login ) option runs the shell specified by the password database entry of the target user as a login shell. This means that login-specific resource files such as .profile or .login will be read by the shell. If a command isspecified, it is passed to the shell for execution via the shell's -c option. If no command is specified, an interactive shell is executed. sudo attempts to change to that user's home directory before running the shell. The security policy shall initialize the environment to a minimal set of variables, similar to what is present when a user logs in. The Command Environment section in the sudoers(5) manual documents how the -i option affects the environment in which a command is run when the sudoers policy is in use.
Ⅵ 如何運行linux shell程序
如何運行shell程序,如何在shell程序以及後續腳本中使用同一個變數,這些在工作中經常用到, 我找到如下的文章,再加深復習一下。
1 source命令用法:
source FileName
作用:在當前bash環境下讀取並執行FileName中的命令。該filename文件可以無"執行許可權"
註:該命令通常用命令「.」來替代。
如:source .bash_profile
. .bash_profile兩者等效。
source(或點)命令通常用於重新執行剛修改的初始化文檔。
source命令(從 C Shell 而來)是bash shell的內置命令。
點命令,就是個點符號,(從Bourne Shell而來)。
source的程序主體是bash,腳本中的$0變數的值是bash,而且由於作用於當前bash環境,腳本中set的變數將直接起效
2 sh, bash的命令用法:
sh/bash FileName
作用:打開一個子shell來讀取並執行FileName中命令。該filename文件可以無"執行許可權"
註:運行一個shell腳本時會啟動另一個命令解釋器.
每個shell腳本有效地運行在父shell(parent shell)的一個子進程里.
這個父shell是指在一個控制終端或在一個xterm窗口中給你命令指示符的進程.
shell腳本也可以啟動他自已的子進程.
這些子shell(即子進程)使腳本並行地,有效率地地同時運行腳本內的多個子任務.
在ubuntu中sh只是bash的一個鏈接。
由於是在子shell中執行,腳本設置的變數不會影響當前shell。
3 ./的命令用法:
./FileName
作用:打開一個子shell來讀取並執行FileName中命令。該filename文件需要"執行許可權"
註:運行一個shell腳本時會啟動另一個命令解釋器.
每個shell腳本有效地運行在父shell(parent shell)的一個子進程里.
這個父shell是指在一個控制終端或在一個xterm窗口中給你命令指示符的進程.
shell腳本也可以啟動他自已的子進程.
這些子shell(即子進程)使腳本並行地,有效率地地同時運行腳本內的多個子任務.
由於是在子shell中執行,腳本設置的變數不會影響當前shell。
4 export:
一個變數創建時,它不會自動地為在它之後創建的shell進程所知。而命令export可以向後面的shell傳遞變數的值。當一個shell腳本調用並執行時,它不會自動得到原為腳本(調用者)里定義的變數的訪問權,除非這些變數已經被顯式地設置為可用。export命令可以用於傳遞一個或多個變數的值到任何後繼腳本
5. 舉例
比如您在一個腳本里export $KKK=111 ,假如您用./a.sh執行該腳本,執行完畢後,您運行 echo $KKK ,發現沒有值,假如您用source來執行 ,然後再echo ,就會發現KKK=111。因為調用./a.sh來執行shell是在一個子shell里運行的,所以執行後,結構並沒有反應到父shell里,但是 source不同他就是在本shell中執行的,所以能夠看到結果.
小測試
1 建立test.sh
#!/bin/bash
export s=/home/jboss/
2 執行命令: source test.sh
echo $s
結果輸出: /home/jboss/
3 新開個shell
執行命令: ./test.sh
echo $s
結果: 沒有輸出s值
結論:
1、執行腳本時是在一個子shell環境運行的,腳本執行完後該子shell自動退出。
2、一個shell中的系統環境變數才會被復制到子shell中(用export定義的變數);
3、一個shell中的系統環境變數只對該shell或者它的子shell有效,該shell結束時變數消失(並不能返回到父shell中)。3、不用 export定義的變數只對該shell有效,對子shell也是無效的。
直接執行一個腳本文件是在一個子shell中運行的,而source則是在當前shell環境中運行的。
source可以讓腳本影響它們的父shell環境,這和export去影響子shell環境相反.
Ⅶ shell腳本什麼時候會異常退出
我經驗是遇到語法錯誤時會異常退出(如下執行到if便退出,不會再列印end),一般情況下腳本都是從上到下執行完才退出的
!/bin/bash
echostart
if#syntaxerror:unexpectedendoffile
echoend
Ⅷ linux終端中輸入sh命令後無法退出,求教怎麼退出sh
linux終端中輸入sh命令後要退出sh一般有兩種方法。
1、執行exit命令退出
exit命令是shell內建的命令,用於退出當前shell。
Ⅸ shell腳本執行完後退出root用戶,腳本應該怎麼寫
#!/bin/bash
su - test <<EOF
pwd;
exit;
EOF
Ⅹ 如何在出錯時自動退出bash shell腳本
用set -e內建:
#!/bin/bash
set -e
# Any subsequent(*) commands which fail will cause the shell script to exit immediately
或者,您可以傳遞-e命令行:
bash -e my_script.sh
您也可以使用禁用此行為set +e。
注意:
殼確實不退出如果失敗的命令是緊跟在所述命令列表的一部分而或直到關鍵字,以下測試的一部分,如果或elif的保留字,在執行任何命令的一部分&&或|| 列表,除了最後的&&或||之後的命令 ,在管道中的任何命令,但最後,或者如果命令的返回值被反轉 !