1.#!/usr/bin/env bash
指定指令碼使用的shell,比較靈活。
2.set -eux
當前shell的執行方式1
-e:指令碼執行非0則退出
-u:有不存在的變數則報錯
-x:除錯指令碼,詳細的日誌輸出,免得去echo
3.set -o pipefail
當前shell的執行方式2
表示管道中任何乙個命令失敗都退出指令碼
4.當前指令碼包含外部指令碼時(不會開啟子shell程序):
(1). filename
(2)source filename,使shell讀入指定的shell程式檔案並依次執行檔案中的所有語句
注:source 和 . 不開啟子shell,在當前shell中執行,設定的區域性變數在執行完命令後仍然有效。
注:bash 或 sh 或 shell script 執行時,起子shell,其繼承父shell的環境變數,子shelll的變數和父shell沒聯絡。
注:shell 的內件命令exec執行命令時,不啟用子shell程序,用被執行的命令列替換掉當前的shell程序。
例如在當前shell中執行 exec pwd 表示用pwd替換當前shell程序 ,即為執行完後會退出當前shell。
可以將exec命令放到乙個shell指令碼中,用主指令碼呼叫這個指令碼,呼叫處用bash xx.sh(xx.sh為存放exec命令的指令碼),這樣會為xx.sh建立乙個子shell去執行,當執行exec後該子指令碼程序就被替換成相應的exec的命令。
5.查詢並刪除程序
ps -ef |grep 'mysql' |grep -v grep |awk '' |xargs kill -9
6.裡面如果有變數,給其使用雙引號
[-f $filename]改為[-f "$filename"]
7.變數
(1)環境變數大寫=>name
(2)自定義變數小寫=>name
(3)特殊變數,通過命令列傳遞引數進行計算,$0代表指令碼名字
(4)exec "$@" =>執行傳進來的所有引數,此命令會替代子she程序。
(5)if
[$(ps -ef |grep -c "ssh")-gt 1];thenecho "true";fi =>$()和反引號用來引用命令,得到的是命令的執行結果
Shell Basic Shell指令碼編寫規範
shell指令碼需要有較高的實用性 可維護 可閱讀 方便他人閱讀,因而需要建立一定的規範來操作 dream361 master cat test2.sh bin bash 所使用的bash程式 date 20170330 建立日期 author created by dream361 作者 mail...
編寫Shell指令碼
獲取變數的方式 1 echo path 2 echo 3 echo path 引數的提取 引數的個數 n 第n個引數 0 當前指令碼名稱 取出所有引數 shift 引數左移 執行過程 2 編寫指令碼內容 單獨講解 3 新增執行許可權 chmod a x abc.sh 4 當前目錄執行 abc.sh ...
Shell 指令碼編寫
shell 指令碼與 windows dos 下的批處理相似,也就是用各類命令預先放入到乙個檔案中,方便一次性執行的乙個程式檔案,主要是方便管理員進行設定或者管理用的。但是它比 windows 下的批處理更強大,比用其他程式設計程式編輯的程式效率更高,它使用了 linux unix 下的命令。方法一...