日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

abd shell关闭所有程序_一个 Shell 脚本逆袭的规范,拿走不谢

發布時間:2023/12/2 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 abd shell关闭所有程序_一个 Shell 脚本逆袭的规范,拿走不谢 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

指定一個默認腳本解釋器

“#!” 是一個約定的標記,它告訴系統這個腳本需要什么解釋器來執行,即使用哪一種Shell。他指明了當我們沒有指定解釋器的時候默認的解釋器。

為什么建議要在首行加上腳本默認解釋器,因為有的操作系統的默認解釋器不是sh或者bash,比如SUSE Linux默認的是csh,不能通過 ./ 的方式執行bash或sh腳本。

我們常用sh和bash,這兩種是最受歡迎的shell,腳本中寫一種即可。如:

#!/bin/bash

我們可以用下面的命令查看本機支持的解釋器

$?cat?/etc/shells/bin/sh/bin/bash/sbin/nologin/bin/tcsh/bin/csh/bin/dash

添加腳本描述信息

在腳本的前面建議加上腳本描述信息,這樣方便查看腳本的信息和有利于腳本的維護工作。

一般的描述信息有:

  • 腳本的寫作時間,作者,版權等
  • 腳本的用途
  • 腳本的注意事項
#!/bin/bash # ########################## # Version: 1.0?#?Author:?快用大數據?#?Create Date : 2021-01-01?#?Name:?start_all.sh?#?Description:?This?is?a?test?shell?script?#?###########################??#?Version: 1.1?# Author: 快用大數據? # Create Date : 2021-01-01 # Name: start_all.sh?#?Description:?Add?a?function?at?the?bottom # ###########################

腳本文件命名有規范

  • 腳本文件后綴用.sh,方便識別文件為shell腳本.
  • 腳本名稱可以根據執行頻率、用途、業務分類等在名稱中加入些關鍵字,可以讓人顧名思義,對腳本有個認知,如:

如啟動腳本:start_all.sh stop_all.sh start_tomcat.sh stop_tomcat.sh

如業務用途腳本:ods_tablename_daliy.sh, dw_tablename_monthly.sh

變量命名有規范

變量的基本命名法則:

  • 統一用小寫字母命名,如 DATE="20210101"
  • 由詞組組成的變量名與函數名用下劃線連將詞組連接,如 start_date="20210101",function_name()
  • 過長的變量名可以用駝峰命名法命名

shell日志與回顯

在開發過程中,寫好業務代碼的重要性不言而喻,同樣的做好日志記錄要非常重要,通過看日志,能夠幫我們解決很多問題。

下面是一些日志要注意的信息:

1、 一些DEBUG級別的日志在腳本調試結束后需要關閉。

2、 日志輸出要帶時間

3、日志的輸出推薦使用tee -a ${log_file}的方式,可以直接在main函數入口處添加日志輸出

logfile="/var/log/debug.log"# define functionsfunction foo(){ echo "foo"}function oo(){ echo "oo"}# define main functionfunction main(){ echo "START DATE:" $(date +"%Y-%m-%d %H:%M:%S") foo oo echo "FINISH DATE:" $(date +"%Y-%m-%d %H:%M:%S")}# invoke main functionmain|tee -a ${logfile}

標準輸出重定向到log文件中,標準錯誤打印在屏幕上

$ sh start_all.sh > /data/logs/hadoop/debug.log

shell 錯誤輸出重定向到標準輸出

$ sh start_all.sh > /data/logs/hadoop/debug.log 2>&1

標準輸出和標準錯誤重定向到不同log文件中

$ sh start_all.sh 1>log.log 2>err.log

使用$()給變量賦值

盡量使用$()將命令的結果賦給變量,而不是用反引號

input_dir=/home/hadoopfiles=$(ls?${input_dir})for file in ${files};do echo ${file}done;

shell變量引用

很多人喜歡直接用$號加變量名引用該變量,建議使用${變量名}來引用變量,這樣不容易出錯和混淆。

date="20200101"logfile="/data/logs/hadoop/${date}/debug.log"echo ${logfile}

對比

date="20200101"logfile="/data/logs/hadoop/$date/debug.log"echo?$logfile

shell腳本的執行方式

腳本的執行方式有好幾種,但是還是建議用腳本解釋器來執行腳本。

強烈推薦,用血的教訓總結。我們的調度工具在升級后,會修改其工作目錄下的所有文件的權限變成只有只讀權限 (400),導致升級后所有用./執行的腳本全部不能執行。

$ sh start_all.sh

腳本的執行方式有以下幾種:

1、工作目錄執行

工作目錄執行,指的是執行腳本時,先進入到腳本所在的目錄(此時,稱為工作目錄),然后使用 ./腳本方式執行。前提是腳本有可執行的權限,如果沒有會報沒有權限錯誤。

$??./start_all.sh在沒有執行權限時要先加執行權限$ chmod?+x?./start_all.sh$?./start_all.sh

2、絕對路徑執行

絕對路徑中執行,指的是直接從根目錄/到腳本目錄的絕對路徑。前提是腳本有可執行的權限,否則會報沒有權限錯誤。

$?/home/hadoop/start_all.sh

3、sh執行

sh執行,指的是用腳本對應的sh或bash來接著腳本執行

$ sh?start_all.sh

注意,若是以方法三的方式來執行,那么,可以不必事先設定shell腳本的執行權限,甚至都不用寫shell文件中的第一行(指定bash路徑)。因為方法三是將start_all.sh作為參數傳給sh(bash)命令來執行的。這時不是start_all.sh自己來執行,而是被人家調用執行,所以不要執行權限。

4、shell環境執行

shell環境執行,指的是在當前的shell環境中執行,可以使用 . 接腳本 或 source 接腳本

$ . start_all.sh或$?source?start_all.sh

shell要有異常處理

要判斷一段代碼是否出現了異常,一個最基本的判斷就是對他返回值的判斷。在shell中,我們往往規定0為正常,一切非0返回值則為不正常。但往往我們在寫shell腳本的時候,忽略對于返回值的判斷。我們看一個很基本的shell程序。

$?這個常量代表的就是上一段shell的返回值,看下面的例子:

#!/bin/shcd /home/xxxx/if [ "$?"= "0" ]; then rm -rf *else echo "cannot change directory" 1>&2 exit 1fi

總結

以上是生活随笔為你收集整理的abd shell关闭所有程序_一个 Shell 脚本逆袭的规范,拿走不谢的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。