sh腳本輸入命令
⑴ 怎麼通過你shell腳本刪除文件的某一行以及後面幾行
1、啟動linux系統,用ssh工具(xshell或者SecureCRT等)連上Linux系統。
⑵ Lunix運行腳本、任務(sh、nohup、qsub)
產生日誌:
sh **.sh &> xx.log
不產生日誌:
sh **.sh > /dev/null 2>&1 &
nohup:no hang up 的縮寫,就是不掛斷的意思 。
nohup命令:如果你正在運行一個進程,而且你覺得在退出帳戶時該進程還不會結束,那麼可以使用nohup命令。 該命令可以在你退出帳戶/關閉終端之後繼續運行相應的進程。 在預設情況下該作業的所有輸出都被重定向到一個名為nohup.out的文件中。
使用許可權:所有使用者
語法格式
nohup Command [ Arg … ] [& ]
參數說明:
Command :要執行的命令。
Arg :一些參數,可以指定輸出文件。
& :讓命令在後台執行,終端退出後命令仍舊執行。
實例
以下命令在後台執行 root 目錄下的 runoob.sh 腳本:
nohup /root/runoob.sh &
在終端如果看到以下輸出說明運行成功:
appending output to nohup.out
這時我們打開 root 目錄 可以看到生成了 nohup.out 文件。
如果要停止運行,你需要使用以下命令查找到 nohup 運行腳本到 PID,然後使用 kill 命令來刪除:
ps -aux | grep "runoob.sh"
參數說明:
a : 顯示所有程序
u : 以用戶為主的格式來顯示
x : 顯示所有程序,不區分終端機
另外也可以使用 ps -def | grep "runoob.sh" 命令來查找。
找到 PID 後,就可以使用 kill PID 來刪除。
kill -9 進程號PID
以下命令在後台執行 root 目錄下的 runoob.sh 腳本,並重定向輸入到 runoob.log 文件:
nohup /root/runoob.sh > runoob.log 2>&1 &
2>&1 解釋:將標准錯誤 2 重定向到標准輸出 &1 ,標准輸出 &1 再被重定向輸入到 runoob.log 文件中。
0 – stdin (standard input,標准輸入)
1 – stdout (standard output,標准輸出)
2 – stderr (standard error,標准錯誤輸出)
實時監測日誌輸出內容命令:tail
tail 命令是nohup命令的好搭檔。配合-f參數,可以實時監視向日誌文件增加的信息。
tail -f myout.log
tail -f 等同於–follow=descriptor,根據文件描述符進行追蹤,當文件改名或被刪除,追蹤停止
tail -F 等同於–follow=name --retry,根據文件名進行追蹤,並保持重試,即該文件被刪除或改名後,如果再次創建相同的文件名,會繼續追蹤
tailf 等同於tail -f -n 10,與tail -f不同的是,如果文件不增長,它不會去訪問磁碟文件,所以tailf特別適合那些便攜機上跟蹤日誌文件,因為它減少了磁碟訪問,可以省電。
監測程序是否在正常運行中:ps
ps命令也可以和nohup命令配合使用,用於顯示當前進程 (process) 的狀態。可以監視後台程序是否在正常運行中或者已經掛掉。
ps -ef|grep yourcommand # -ef 參數顯示所有命令,連帶啟動時的命令行參數
qsub命令用來從登陸節點上向計算節點進行任務投遞。前提是在伺服器上有集群管理工具分配計算節點等。SGE(SGE, Sun Grid Engine)集群管理工具可以用來提交批處理作業,SGE支持單或多節點作業,它將用戶投遞的任務進行排隊,然後將任務交給能夠運行的結算節點執行,工作流程可以分為四步:接受用戶投放的任務;在任務運行以前,將任務放到一個存儲區域;發送任務到一個執行設備,並監控任務的運行;運行結束寫回結果並記錄運行日誌。
qsub [ options ] [ command | -- [ command_args ]]
1. -@ optionfile (contains all valid options) 就是把qsub命令的可選項組合成一定功能的語句,保存在一個文件中。 qsub -a optionfilename jobfilename
2. -a date_time 設置作業什麼時候可以執行。 格式:CC YY MMDDHHMM.SS 如 201109272213.21 qsub -a 201109272213.21 ../simplejob
3. -A account_string Identifies the account to which the resource consumption of the job should be charged 設置一個作業的賬戶名,便於統計該賬戶使用的資源等信息 qsub -A testaccountname jobname
4. -ac 添加名/值對到作業上下文 -dc 刪除。。 -sc 設置(修改)。。 Contexts provide a way to dynamically attach and remove meta- information to and from a job. The context variables are not passed to the job's execution context in its environment The outcome of the evaluation of all -ac, -dc, and -sc options or corresponding values in qmon is passed to defined JSV instances as parameter with the name -ac.
5. -ar ar_id 分配已提交作業,作為它的一部分,給已存在預約。ar=advance reservation qsub -ar 60 jobname #ai_di = unsigned integer
6. -b y[es]|n[o] Gives the user the possibility to indicate explicitly whether command should be treated as binary or script.
7. -binding 等待理解
8. -c occasion_specifier(際符) 定義或者重定義作業是否要被檢查,if是,在什麼環境下。 n no checkpoint is performed. s checkpoint when batch server is shut down. m checkpoint at minimum CPU interval. x checkpoint when job gets suspended. <interval> checkpoint in the specified time interval. qsub -c n jobname
9. -C prefix_string 前綴字元串定義一個在作業命令中的指令 qsub -C "#$" ../simplejob
10. -ckpt ckpt_name 選擇檢查點環境來檢查一個作業,同時聲明這個作業是檢查點作業。 qsub -ckpt allanckpt ../simplejob
11. -clear 重置作業的所有元素為初始默認狀態 qsub -clear ../simplejob
12. -cwd =current working directory 從當前的目錄開始執行作業。如果有相應的配置文件的話, 這個命令將啟動網格引擎的路徑別名設備。
13. -dl date_time 設置作業在deadline之前執行完,格式為CC YYU MMDDHHMM.SS qsub -dl 201101131159.01 ../simplejob
14. -e [[hostname]:]path,...定義或重新定義作業的標准錯誤流使用的路徑 e=stderror
15. -h | -h {u|s|o|n|U|O|S}... h=hold 暫停作業執行 'u' .........user hold. `s' denotes a system hold. `o' denotes a operator hold. `n' denotes no hold (requires manager privileges). `U' removes a user hold. `S' removes a system hold. `O' removes a operator hold. qsub -h ../simplejob(qsub只能使用-h)
16. -l resource=value,... l=launch 啟動滿足資源需求的作業 Launch the job in a Grid Engine queue meeting the given resource request list. In case of qalter the previous definition is replaced by the specified one. qsub -l s_core=5 ../simplejob
17. -q wc_queue_list 定義或重定義可能用來執行作業的隊列,包括群聚隊列、隊列域、隊列實例。 qsub -q all.q ../simplejob
18. -hard 表示該作業在安排執行之前,作業的資源需求必須滿足。 qsub -hard ../simplejob
19. -soft 表示該作業在安排執行之前,作業的資料需求可以有、但不必須有。 qsub -soft ../simplejob
20. -help 獲取幫助 qsub -help
21. -hold_jid wc_job_listt 定義或重定義當前提交的作業對哪些作業有依賴,所依賴的作業使用通配符作業清單表示:wc_job_list qsub -hold_jid 63926 ../simplejob
22. -hold_jid_ad wc_job_list ad=array dependency list of the submitted job 定義或者重定義組作業依賴列表。 qsub -hold_jid_ad 1-1200
23. -t n[-m[:s]] 指定組作業的數量,將指示器與作業關聯 qsub -t 1-1200 ../simplejob
24. -i [[hostname]:]file,... 定義或重定義一個文件為作業的標准輸入流 qsub -i stdin job
25. -j y[es]|n[o] 指定作業的標准錯誤流是否合並到標准輸出流,如果-j y 和-e都存在的話,SGE將忽略後者。 qsub -j y ../simplejob
qstat -f # 查看用戶任務
qstat -j jobId # 按任務id查看
qstat -explain a|c|A|E -j jobID # 查看任務任務並給出解釋
qstat -u user # 按用戶查看
qw: 表示等待狀態
hqw: 任務掛起等待中,待依賴的任務完成後執行
Eqw: 投遞任務出錯
r: 表示任務正在運行
s: 暫時掛起
dr: 節點掛了之後,刪除任務就會出現這個狀態,只有節點重啟之後,任務才會消失
qdel -j 1111 刪除任務號為1111的任務
qdel -u AAA 刪除AAA投遞的所有任務
歡迎大家交流心得~~~3QU!!!...........
---------------------------------------------------------------------------------------------------------I am a line !----------------------------------------------------------------------------------------------
⑶ linux 命令中的sh是什麼意思
1、sh是linux中運行shell的命令,是shell的解釋器,shell腳本是linux中殼層與命令行界面,用戶可以在shell腳本輸入命令來執行各種各樣的任務。
要運行shell腳本,首選需要給shell腳本許可權,這里里以hello.sh文件為例,首先需要按下「crtl+shift+T」打開終端窗口:
⑷ 在mac中怎麼運行.sh文件哦
在mac終端下運行shell腳本。
1、寫好自己的腳本,比如aa.sh。
2、打開終端執行。
方法一: 輸入命令 ./aa.sh
方法二:直接把 aa.sh 拖入到終端裡面
(4)sh腳本輸入命令擴展閱讀:
Mac是蘋果公司自1984年起以「Macintosh」開始開發的個人消費型計算機,如:iMac、Mac mini、Macbook Air、Macbook Pro、Macbook、Mac Pro等計算機。使用獨立的Mac OS系統,最新的macOS系列基於NeXT系統開發,不支持兼容。是一套完備而獨立的操作系統。
macOS操作系統界面非常獨特,突出了形象的圖標和人機對話(圖形化的人機對話界面最初來自施樂公司的Palo Alto研究中心,蘋果借鑒了其成果開發了自己的圖形化界面,後來又被微軟的Windows所借鑒並在Windows中廣泛應用)。
MAC常用快捷鍵:
1、新增郵件(⌘ + Shift + I)
2、搜尋文字定義(⌘ + Control + D)
3、螢幕截圖 (⌘ + Shift + 4)
4、最小化所有視窗 (⌘ + Option + M)
5、顯示最常用應用程式(⌘ + Shift + Tab)
6、關閉 Safari 分頁(⌘ + W)
7、清空桌面畫面(⌘ + F3)
8、微調音量(Option + Shift + F11/F12)
9、直接卷動到最上方或最下方(⌘ + 上/下)
⑸ Mac下建立.sh腳本文件
首先我們需要建立一個腳本文件,可以用文本編輯器或者其它工具(如VS Code)建立,注意保存為.sh格式。如,建立一個名為test1的.sh文件:test1.sh。在文件中我們可以寫一段最簡單的命令:echo Hello World!!!
二、賦予腳本可執行的許可權
1、進入Mac終端
2、進入test1.sh文件所在的目錄,cd 空格,拖拽文件到終端,然後刪除 /文件名 即可
3、賦予腳本可執行許可權,輸入命令:chmod +x test1.sh 回車
⑹ Shell腳本編程實戰
做 Java 的肯定都接觸過 Linux 系統,那麼很多時候我們在開發的過程中都是把我們項目打成一個jar包,或者是war包的形式,然後通過 XFTP 上傳到我們伺服器的指定目錄,然後運行一端啟動腳本,讓我們的項目變得可以訪問 就像 ./sh service.sh start 然後啟動我們寫好的 sh 的shell腳本。接下來我們就來學習一下關於 Shell 腳本是如何寫出來的。
Shell 腳本是什麼?Shell是一個命令解釋器,它的作用是解釋執行用戶輸入的命令及程序等,也就是說,我們用戶每輸入一條命令,Shell 就會相對應的執行一條命令。當命令或程序語句不在命令行下執行,而是通過一個程序文件來執行時,該程序文件就被稱為Shell腳本。
在我們的 Shell 腳本中,會有各種各樣的內容,賦值,計算,循環等一系列的操作,接下來我們就來看看這個 Shell 腳本怎麼寫吧
1.查看自己當前系統默認的 Shell
echo $SHELL
輸出:/bin/bash
2.查看系統支持的Shell
cat /etc/shells
輸出:
/bin/sh /bin/bash /usr/bin/sh /usr/bin/bash
也就是說,我們的雲伺服器是支持我們在這里給他安排 Shell 腳本的
我們這時候先來安排一下 sh 的文件,創建一個文件夾,然後在其中創建一個 sh 的文件。
mkdir /usr/local/shelltest
touch test.sh
創建完成我們編輯一下內容
vim test.sh
然後我們出來運行一下我們的 Shell 的第一個腳本
bash test.sh
出來的結果是 Hello World Shell
一個及其簡單的腳本出現了,接下我們就分析一波我們寫了點啥?
#!/bin/bash
#! 是一個約定的標記,它告訴系統這個腳本需要什麼解釋器來執行,即使用哪一種 Shell
我們在之前也使用了 echo $SHELL 來查看了自己系統默認的是哪一種 sh 解析器,之前看到的是/bin/bash,所以我們在寫 Shell 腳本的時候,我們在開頭默認的約定中,我們寫了這個是用 /bin/bash 來進行解釋的,
那麼我們如何像之前調用我們的當前目錄中的 Shell 腳本一樣去調用他呢?就像這個樣子的 ./sh service.sh start
1.授權,
我們先不授權試一下看看能通過 ./test.sh 進行調用么
bash: ./test.sh: Permission denied 會提示這個,也就是沒有授權定義,
授權命令:chmod +x test.sh
2.執行 ./test.sh
然後調用就能正常輸出了,就是說,在當前的目錄下執行這個腳本命令。
變數命名實際上很簡單,我們先來試一下
name=yikeji
這時候我們怎麼使用變數呢?實際上只要在前面加上一個符號就可以 $
echo $name
上面的兩種寫法都是可以的,外面的大括弧加和不加區別不大,可以省略,直接就 $name 就可以使用你定義的變數
使用括弧的意義一般在於區別某些變數,比如你寫了一串的內容,可能寫的是 echo $nameismyfriend ,如果連在一起,是不是有點尷尬,這時候就可以使用括弧區別一下, echo ${name}ismyfriend 不使用括弧的時候,他就去找nameismyfriend這個變數了,就無法出來我們要的效果。
unset name
這時候我們就把我們剛才定義的 name=yikeji 這個變數給去掉了,我們可以調用一下我們的變數看是什麼?
echo $name
這是不是就證明我們自己定義的變數已經刪除了
那麼我們需要一個關鍵字,大家肯定能想到是什麼關鍵字 readonly
我們先給name賦值,然後使用 readonly 設置只讀,然後再改變一下試試,
竟然是真的,如果不設置只讀,是不是會重新可以進行賦值,我們測試個年齡,
所以我們就可以肯定,readonly就是設置只讀的關鍵詞,記住了么?
那麼設置只讀的變數可以刪除么?畢竟總有杠精的面試官會提問這個棘手的問題,但是,阿粉試過的所有方式好像都是不行的,阿粉就直接重啟了自己的伺服器,這樣臨時的變數就不存在了!
說真的,Shell腳本的流程式控制制數一般才是yyds,為什麼這么說,因為你在寫大部分的腳本的時候,流程式控制制的地方永遠是最多的,判斷,選擇,等等一系列的函數,當時熟練使用的時候,就發現這東西確實很有意思。
我們先說最簡單的 if else 這也是我們最經常使用的判斷,在寫 Shell 腳本的時候,就不像我們的 Java 中直接寫
Xshell 中的語法就不是這個樣子的, Xshell 語法:
末尾的 fi 就是 if 倒過來拼寫,我們可以寫一個 if 的腳本試一下這個流程能否理解。
這里申明一下,
我們在上面這段腳本中寫就是內容就是,我們給腳本傳入一個值,然後比對這個值和2的大小關系,然後輸出我們指定的內容。
運行後就能看到
$1 表示我們給 Shell 腳本輸入的第一個參數, $0 就是你寫的shell腳本本身的名字,$2 是我們給 Shell 腳本傳的第二個參數
大家在部署某些項目的時候,是不是啟動命令就很簡潔,就是 sh service.sh start 類似這種的,那我們來看看一般這種是怎麼寫的,這就用到了另外一塊的內容,和 if 類似,在 Java 中也有,那就是 Case .
我們先來看看 Case 的語法,
case ... esac 實際上就和 Java 中的 Case 是非常相似的,case 語句匹配一個值與一個模式,如果匹配成功,執行相匹配的命令. esac 是一個結束的標志。
光說不練,假把式,我們來搞一下試試寫一個腳本來搞一下。就用我們剛才說的 sh servic.sh start 來進行測試。
我們來看看運行結果
那麼這段 Shell 腳本是什麼意思呢?其實很簡單,匹配我們傳入的第一個字元,和 start 還有 stop 進行比較,如果匹配上之後,輸出命令,最後退出即可。
是不是感覺沒有那麼復雜了呢?
說到流程式控制制,那麼肯定不能不說 for , 畢竟 for 循環在 Java 中那可是重頭戲。
我們先看他的格式
那麼我們有沒有說像是 Java 中那種 for 循環一樣的方式呢?比如說這個 for ((i=1; i<=j; i++))
實際上也是支持這種的,我們來寫一個試試。
執行一下看看
既然有 for 那是不是就有 while 呢?是的,沒錯,確實是有 while ,也是循環的意思,但是寫法有略微不一樣的地方
我們來舉個嘗試列印九九乘法表來看一下
是不是也挺簡單的?
其實 Shell 腳本的編寫一般都是在實際應用中提升,單純的寫測試腳本,也是可以讓自己對知識的掌握比較充分,而我們一般都是寫一些比較簡單的腳本,復雜的不是還有運維么?
⑺ 如何運行shell腳本
編寫好的shell腳本(如:test),可以採取兩種方式進行運行: 一、 $ sh test 一般不採用這種調用方式,尤其不採用「sh<test」的調用方式,因為這種方式將禁止shell讀取標准輸入。 也可以採用 $ ksh test 這種方式要求shell具有「可讀」的訪問許可權。 二、直接運行可執行的shell腳本之前,首先應使用下列chmod命令,把shell腳本文件設置為可執行的文件。 chmod 755 test(除文件屬主可寫之外,每個用戶均具有讀和可執行的訪問許可權) chmod +rx test(同上) chmod u+rx test(只有文件屬主具有讀和執行的訪問許可權) 按照上述要求設置shell腳本文件的訪問許可權後,可採用下列方式,直接運行shell腳本了。 1、test(如果命令檢索路徑包含當前目錄) 2、./test(如果命令減縮路徑不包含當前目錄) *說明: sh test 方式調用一個shell叫蹦可能會禁止某些shell特定的擴展功能,因而可能引起腳本無法正確執行。
⑻ linux下shell腳本執行過程中重新輸入命令
其實可以寫成一個腳本
function 就好
也可以直接調用
比如說我有2個文件
abcd.sh
#!/bin/bash
echo $1
test.sh
echo pls input something
read input
clear
abcd.sh $input
現在我執行test.sh
$ test.sh
pls input something
zzzzzzzzzzz
結果是
zzzzzzzzzzz
這就是簡單的調用
你可以傳遞參數就好
如果你有多個需要輸入的就很麻煩。。。
寫成方法會更好些
⑼ linux如何在終端里輸入shell腳本
一般以#!/bin/sh開頭(不是必須要寫,但一定要單獨一行),指定執行這個腳本的shell程序(也可以用#!/bin/zsh或其他),然後就是堆命令了。
Linux的shell腳本支持很多功能,加上Linux高度模塊化的命令,完全可以用shell腳本寫出復雜的程序。
以上只是簡單介紹如何開始寫shell腳本,如果要寫復雜的腳本,還需要深入學習相關知識(如if——fi、case——esac等結構)。
當然,還需要給腳本加上可執行許可權(chmod +x ./file.sh),否則可以用sh ./file.sh方式執行腳本(這里的sh是執行腳本所需shell,命令也可以是zsh ./file.sh或其他)。
整個shell腳本,其實就相當於你在終端輸入的一系列命令,如果想在shell里做什麼,就先想想在終端可以做什麼吧,字元的的連接,就是直接用 "" 雙引號,輸出,變數定義無 $ 符號,但是使用時一定要加上 $ 符號。
"=" 賦值符號,兩邊一定不能有空格,這和其他語言有區別,尤其是你還有自己代碼美觀風格時特別注意,否則會報語法錯誤!
for 中的數組內容是以 " " 空格分隔,而非 "," 逗號分格。
條件判斷 [ true ] 中括弧 後面需要有一個空格,但是兩個中括弧之間不能有空格如 [[ true ]]。
while 條件判斷可以用 () 括弧,也可以用 [[ ]] 中括弧。
如果用windows寫shell,一定要注意換行符格式 而非 , 需要藉助一些編輯器(如notepad++)更改換行符格式!