精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

探索 Shell 腳本的威力

系統 Linux
本文章向你介紹了 Shell 腳本的基礎知識以及其在日常生活中的重要性。

當我們登錄到一個 UNIX/Linux 系統時,我們首先注意到的是閃爍的光標和 $ 符號之間的空格。這就是 Shell(交互界面)。多年來,它一直是一種無處不在(有時甚至是唯一的)與計算機交互的界面。在圖形用戶界面(GUI)出現和流行之前,終端和 Shell 是唯一的機制,可以讓計算機按照我們的意圖進行操作。乍一看,我們可能會想知道 Shell 的作用,除了將命令傳遞給底層操作系統以進行執行之外。我們中的大多數人熟悉像 ls(用于列出目錄內容),cd(用于更改當前目錄)等命令。通過 Shell,我們可以執行這些命令。Shell 理解我們輸入的文本 - 將其轉換為標記 - 然后在操作系統上執行這些標記。

不同的 Shell 變種

最初,終端使用了樸素的 Bourne Shell(即 Sh)。多年來,許多不同的 Shell 變種被開發出來和使用。其中一些流行的包括 C Shell(Csh) 和 Korn Shell(Ksh)。Sh 在一段時間內不再受歡迎,但通過其最新的化身 —— Bourne Again Shell(Bash),它再次流行起來。

Shell 實際上是做什么的?

Shell 是操作系統(OS)和用戶之間的直接接口。通過使用命令和應用程序來使用計算機上安裝的工具,我們可以使計算機按照我們的意愿工作。一些命令是安裝在操作系統上的應用程序,而某些命令則是直接內置在 Shell 中的。在 Bash 中內置的一些命令包括 clearcdeval 和 exec,還有 ls 和 mkdir 這樣的應用程序。內置在 Shell 中的命令因 Shell 而異。

在本文中,我們將涵蓋與 Bash 相關的幾個方面。

更多關于 Shell 的內容

我們中的大多數人都用過像 lscd 和 mkdir 這樣的命令。當我們在一個目錄上運行 ls -l 命令時,該目錄中的所有子目錄和文件都會在屏幕上列出。如果數量很大,屏幕會滾動。如果終端不支持滾動條(在很多年里都是如此),則無法查看已滾動過的條目。為了克服這個問題,我們使用像 more 和 less 這樣的命令。它們允許我們逐頁查看輸出。通常使用的命令是:

ls -l | less

在這里 Shell 是在做什么?看起來像是單個命令,實際上是 ls 和 less 兩個命令依次執行。管道符(|)將這兩個程序連接起來,但連接由 Shell 管理。由于有了管道符,Shell 連接了這兩個程序——它將 ls 命令的標準輸出連接到 less 的標準輸入(stdin)。管道功能使我們能夠將任何程序的輸出作為另一個程序的輸入提供,而無需對程序進行任何更改。這是許多 UNIX/Linux 應用程序的理念——保持應用程序簡單,然后將許多應用程序組合在一起以實現最終結果,而不是讓一個程序做很多事情。

如果需要,我們可以將 ls 的輸出重定向到文件中,然后使用 vi 查看它。為此,我們使用以下命令:

ls -l > /tmp/my_file.txt
vi /tmp/my_file.txt

在這種情況下,ls 的輸出被重定向到一個文件中。這由 Shell 進行管理,它理解 > 符號表示重定向。它將其后面的標記視為文件。

使用 Shell 自動化

結合命令的能力是使用 Shell 命令創建自動化腳本的關鍵要素之一。在我最近的項目中,我們使用集群模式執行 Python/Spark(PySpark)應用程序。每個應用程序執行了許多結構化查詢語言(SQL)語句 - SparkSQL。為了跟蹤應用程序的進展,我們會打印有關正在執行的 SQL 的詳細信息。這樣可以讓我們保留應用程序中正在發生的情況的日志。由于應用程序在集群模式下執行,要查看日志,我們必須使用以下 yarn 命令:

yarn log –applicationId [application_id]

在大多數情況下,應用程序生成的日志非常大。因此,我們通常將日志導入到 less 中,或將其重定向到一個文件中。我們使用的命令是:

yarn log –aplicationId [application_id] | less

我們的開發團隊有 40 人。每個人都必須記住這個命令。為了簡化操作,我將這個命令轉換成了一個 Bash 腳本。為此,我創建了一個以 .sh 為擴展名的文件。在 UNIX 和 Linux 系統上,文件擴展名并不重要。只要文件是可執行的,它就能工作。擴展名在 MS Windows 上有意義。

需要記住的重要事項

Shell 是一個解釋器。這意味著它會逐行讀取程序并執行它。這種方法的限制在于錯誤(如果有)在事先無法被識別。直到解釋器讀取和執行它們時,錯誤才會被識別出來。簡而言之,假如我們有一個在前 20 行完美執行,但在第 21 行由于語法錯誤而失敗的 Shell 程序。當腳本在第 21 行失敗時,Shell 不會回滾/撤銷之前的步驟。當發生這樣的情況時,我們必須糾正腳本并從第一行開始執行。因此,例如,如果在遇到錯誤之前刪除了幾個文件,腳本的執行將停止,而文件將永遠消失。

我創建的腳本是:

#!/bin/bash
yarn log –applicationId 123 | less

…其中 123 是應用程序的 ID。

第一行的前兩個字符是特殊字符(“釋伴”)。它們告訴腳本這是一個可執行文件,并且該行包含要用于執行的程序的名稱。腳本的其余行傳遞給所提到的程序。在這個例子中,我們將執行 Bash。即使包含了第一行,我們仍然必須使用以下命令對文件應用執行權限:

chmod +x my_file.sh

在給文件設置了執行權限之后,我們可以如下執行它:

./my_file.sh

如果我們沒有給文件設置執行權限,我們可以使用以下命令執行該腳本:

sh ./my_file.sh

傳遞參數

你很快就會意識到,這樣的腳本很方便,但立即變得無用。每次執行 Python/Spark 應用程序時,都會生成一個新的 ID。因此,對于每次運行,我們都必須編輯文件并添加新的應用程序 ID。這無疑降低了腳本的可用性。為了提高其可用性,我們應該將應用程序 ID 作為參數傳遞:

#!/bin/bash
yarn –log -applicationId ${1} | less

我們需要這樣執行腳本:

./show_log.sh 123

腳本將執行 yarn 命令,獲取應用程序的日志并允許我們查看它。

如果我們想將輸出重定向到一個文件中怎么辦?沒問題。我們可以將輸出重定向到一個文件而不是發送給 less

#!/bin/bash
ls –l ${1} > ${2}
view ${2}

要運行腳本,我們需要提供兩個參數,命令變為:

./my_file.sh /tmp /tmp/listing.txt

當執行時,$1 將綁定到 /tmp$2 將綁定到 /tmp/listing.txt。對于 Shell,參數從一到九命名。這并不意味著我們不能將超過九個參數傳遞給腳本。我們可以,但這是另一篇文章的主題。你會注意到,我將參數命名為 ${1} 和 ${2},而不是 $1 和 $2。將參數名稱封閉在花括號中是一個好習慣,因為它使我們能夠無歧義地將參數作為較長變量的一部分組合起來。例如,我們可以要求用戶將文件名作為參數,并使用它來形成一個更大的文件名。例如,我們可以將 $1 作為參數,創建一個新的文件名為 ${1}_student_names.txt

使腳本更健壯

如果用戶忘記提供參數怎么辦?Shell 允許我們檢查這種情況。我們將腳本修改如下:

#!/bin/bash
if [ -z "${2}" ]; then
  echo "file name not provided"
  exit 1
fi
if [ -z "${1}" ]; then
  echo "directory name not provided"
  exit 1
fi
DIR_NAME=${1}
FILE_NAME=${2}
ls -l ${DIR_NAME} > /tmp/${FILE_NAME}
view /tmp/${FILE_NAME}

在這個程序中,我們檢查是否傳遞了正確的參數。如果未傳遞參數,我們將退出腳本。你會注意到,我以相反的順序檢查參數。如果我們在檢查第一個參數存在之前檢查第二個參數的存在,如果只傳遞了一個參數,腳本將進行到下一步。雖然可以按遞增順序檢查參數的存在,但我最近意識到,從九到一檢查會更好,因為我們可以提供適當的錯誤消息。你還會注意到,參數已分配給變量。參數一到九是位置參數。將位置參數分配給具名參數可以在出現問題時更容易調試腳本。

自動化備份

我自動化的另一個任務是備份。在開發的初期階段,我們沒有使用版本控制系統。但我們需要有一個機制來定期備份。因此,最好的方法是編寫一個 Shell 腳本,在執行時將所有代碼文件復制到一個單獨的目錄中,將它們壓縮,并使用日期和時間作為后綴來上傳到 HDFS。我知道,這種方法不如使用版本控制系統那樣清晰,因為我們存儲了完整的文件,查找差異仍然需要使用像 diff 這樣的程序;但它總比沒有好。盡管我們最終沒有刪除代碼文件,但團隊確實刪除了存儲助手腳本的 bin 目錄!!!而且對于這個目錄,我沒有備份。我別無選擇,只能重新創建所有的腳本。

一旦建立了源代碼控制系統,我很容易將備份腳本擴展到除了之前上傳到 HDFS 的方法之外,還可以將文件上傳到版本控制系統。

總結

如今,像 Python、Spark、Scala 和 Java 這樣的編程語言很受歡迎,因為它們用于開發與人工智能和機器學習相關的應用程序。盡管與 Shell 相比,這些語言更強大,但“不起眼”的 Shell 提供了一個即用即得的平臺,讓我們能夠創建輔助腳本來簡化我們的日常任務。Shell 是相當強大的,尤其是因為我們可以結合操作系統上安裝的所有應用程序的功能。正如我在我的項目中發現的那樣,即使經過了幾十年,Shell 腳本仍然非常強大。我希望我已經說服你嘗試一下了。

最后一個例子

Shell 腳本確實非常方便。考慮以下命令:

spark3-submit --queue pyspark --conf "spark.yarn.principal=abcd@abcd.com" --conf "spark.yarn.keytab=/keytabs/abcd.keytab" --jars /opt/custom_jars/abcd_1.jar --deploy-mode cluster --master yarn $*

我們要求在執行 Python/Spark 應用程序時使用此命令。現在想象一下,這個命令必須每天被一個由 40 個人組成的團隊多次使用。大多數人會在記事本中復制這個命令,每次需要使用時,會將其從記事本中復制并粘貼到終端中。如果復制粘貼過程中出現錯誤怎么辦?如果有人錯誤使用了參數怎么辦?我們如何調試使用的是哪個命令?查看歷史記錄并沒有太多幫助。

為了讓團隊能夠簡單地執行 Python/Spark 應用程序,我們可以創建一個 Bash Shell 腳本,如下所示:

#!/bin/bash
SERVICE_PRINCIPAL=abcd@abcd.com
KEYTAB_PATH=/keytabs/abcd.keytab
MY_JARS=/opt/custom_jars/abcd_1.jar
MAX_RETRIES=128
QUEUE=pyspark
MASTER=yarn
MODE=cluster

spark3-submit --queue ${QUEUE} --conf "spark.yarn.principal=${SERVICE_PRINCIPAL}" --conf "spark.yarn.keytab=${KEYTAB_PATH}" --jars ${MY_JARS} --deploy-mode ${MODE} --master ${MASTER} $*

這展示了一個 Shell 腳本的強大之處,讓我們的生活變得簡單。根據你的需求,你可以嘗試更多的命令和腳本,并進一步探索。

責任編輯:龐桂玉 來源: Linux中國
相關推薦

2024-05-06 11:30:06

2024-02-27 09:12:24

PostgreSQL數據庫查詢WHERE 子句

2024-11-27 09:19:25

2019-08-09 13:50:08

shellLinux

2021-05-12 10:17:15

Shell工具Linux

2013-09-04 09:59:49

監控 Shell 腳本

2023-12-21 07:09:32

Go語言任務

2018-08-28 16:02:59

LinuxShellBash

2020-10-27 07:51:12

Shell腳本日期

2013-08-19 12:46:27

2013-08-30 10:25:22

Shell主機監控

2020-12-16 08:51:31

Shell腳本用途

2020-10-21 11:55:44

Shell編程語言Linux

2020-04-26 19:12:29

shell腳本Linux

2017-08-11 17:20:07

LinuxShell

2011-09-27 13:52:41

2020-06-17 10:42:54

shellshell腳本Linux

2023-11-15 11:34:03

SassBootstrap

2020-11-02 08:23:36

shell腳本Linux

2009-11-18 13:52:30

PHP shell腳本
點贊
收藏

51CTO技術棧公眾號

久久精品www| 欧美日韩一区二区在线免费观看| 国产美女主播在线观看| 午夜国产一区| 亚洲人在线观看| 一级做a免费视频| 爱情岛论坛亚洲品质自拍视频网站| av成人老司机| 国产日韩在线播放| 国产在线观看你懂的| 成人同人动漫免费观看 | 91蝌蚪porny成人天涯| 7777精品伊人久久久大香线蕉的| 亚洲视频在线观看一区| 国产精品视频免费在线| 久久网中文字幕| 欧美日韩播放| 精品国产亚洲一区二区三区在线观看| 黄www在线观看| 中文字幕在线观看播放| 国产欧美精品一区| 国内精品二区| 国产福利免费视频| 精一区二区三区| 欧美综合在线第二页| 五月婷婷一区二区| 亚洲a一区二区三区| 亚洲偷熟乱区亚洲香蕉av| 蜜臀aⅴ国产精品久久久国产老师| 精品久久在线| 日韩欧美在线字幕| 国产素人在线观看| sm在线观看| 一区二区三区四区在线播放| 亚洲欧洲日韩综合二区| 91老司机在线| 成年人在线观看av| 澳门精品久久国产| 欧美一区二区不卡视频| 亚洲精品手机在线观看| 中文另类视频| 91极品美女在线| 777久久久精品一区二区三区| 深夜国产在线播放| 最新中文字幕一区二区三区 | 人妻一区二区三区| 国产黑丝在线一区二区三区| 成人一区二区电影| 国产又粗又黄又爽| 国产在线播放一区三区四| 国产乱人伦真实精品视频| 老熟妇一区二区三区啪啪| 久久久精品日韩| 日韩av手机在线观看| 岛国av中文字幕| 老牛国产精品一区的观看方式| 5566成人精品视频免费| 亚洲欧美国产精品桃花| 日本女优爱爱视频| bl视频在线免费观看| 夜夜精品视频一区二区| www婷婷av久久久影片| 久操av在线| 午夜精品成人在线视频| 日韩av三级在线| 欧美片第1页| 欧美性淫爽ww久久久久无| 中文字幕在线综合| 国产激情精品一区二区三区| 欧美xingq一区二区| 69亚洲乱人伦| 自拍视频一区| 久久精品电影一区二区| 久久久亚洲人| 色偷偷亚洲男人天堂| 国产亚洲精品久久久久久豆腐| 91综合久久| 精品中文字幕乱| 日本五十路女优| 日韩精品电影一区亚洲| 国产精品精品一区二区三区午夜版| 一区二区三区精品99久久| 91pony九色| 91亚洲精品视频在线观看| 亚洲精品电影网在线观看| 一区二区黄色片| 99久久久久国产精品| 欧美激情在线有限公司| 国内免费精品视频| 看片的网站亚洲| 成人在线免费网站| 国产黄色在线播放| 一区二区三区精品在线| 日本在线观看a| 国产精品一区二区三区四区在线观看 | 成人综合日日夜夜| 日韩黄色av网站| 操她视频在线观看| 亚洲毛片一区| 国产一区二区色| 五十路在线观看| 国产精品福利影院| 久久精品视频网| 亚洲自拍在线观看| 蝌蚪视频在线播放| 一区二区三区高清不卡| 黑鬼大战白妞高潮喷白浆| 韩国三级大全久久网站| 亚洲欧美国产日韩天堂区| 日韩一区二区三区四区在线| 久久久噜噜噜| 国产伦精品一区二区三区照片| 成人好色电影| 亚洲国产美女搞黄色| 激情视频免费网站| 美女少妇全过程你懂的久久 | 久久影视中文粉嫩av| 欧美成人三区| 在线观看视频一区二区欧美日韩| 中文字幕在线视频播放| 欧美淫片网站| 91精品国产综合久久香蕉最新版 | 91视视频在线观看入口直接观看www | 九九热在线免费观看| 久久精品噜噜噜成人av农村| 久久久久se| 欧美另类tv| 91精品一区二区三区在线观看| av男人的天堂av| 亚洲欧美日韩国产| 国产在线一区二区三区四区 | 国产一区二区三区站长工具| 久久久久中文字幕| 成 人 黄 色 片 在线播放| 国产精品久99| 日本xxxx黄色| 欧美艳星介绍134位艳星| 欧美一级在线播放| 香蕉视频911| 香蕉成人伊视频在线观看| 97免费公开视频| 亚洲乱码精品| 91久久久久久久久久| 久久久久亚洲AV成人无在| aaa在线观看| 午夜视频在线观看一区二区| 深夜视频在线观看| 国内精品美女在线观看| 亚洲综合精品一区二区| av色综合久久天堂av色综合在| 在线观看91av| www.99re7| 国产传媒久久文化传媒| 欧美视频在线第一页| 中文字幕一区二区三区中文字幕 | 成人自拍视频网| 在线观看日韩av| 国产精品国产av| 亚洲乱码国产乱码精品精98午夜| 18禁一区二区三区| 欧美午夜一区二区福利视频| 国产精品青青草| 免费成人在线电影| 亚洲欧美综合图区| 最近中文字幕av| 亚洲欧美激情视频在线观看一区二区三区 | 中文精品一区二区三区| 欧洲亚洲精品| 欧美理论片在线观看| 精品人妻午夜一区二区三区四区 | 精品国产拍在线观看| 97在线公开视频| 亚洲国产精品久久久久秋霞影院 | 精品国产一区二区三区四区| 国产精品久久久久久网站| 在线观看av黄网站永久| 欧美一区二区网站| 国产精品自拍99| 国产精品你懂的在线| 性色av浪潮av| 香蕉成人久久| 免费观看中文字幕| 国产欧美啪啪| 国产精品久久久久久久久男| 在线网址91| 亚洲精品一区中文字幕乱码| 在线观看毛片视频| 亚洲已满18点击进入久久| 久久国产精品影院| 国产熟女高潮一区二区三区| 91嫩草亚洲精品| 国产一区二区在线网站| 精品欧美一区二区三区在线观看| 久久中文字幕在线视频| 四虎精品成人免费网站| 欧美精品 国产精品| 全部毛片永久免费看| 国产精品久久国产精麻豆99网站| 无码av免费精品一区二区三区| 全部av―极品视觉盛宴亚洲| av在线观看地址| 999国产精品| 久久av免费观看| 欧美另类中文字幕| 国产成人自拍视频在线观看| 性欧美videos高清hd4k| 中文字幕无线精品亚洲乱码一区 | 亚洲激情第一区| 99久久人妻无码精品系列| 粉嫩av一区二区三区粉嫩| 网站一区二区三区| 久久精品久久精品久久| 蜜臀久久久99精品久久久久久| 国产夫妻自拍一区| 久久久久美女| 先锋影音一区二区三区| 亚洲婷婷影院| 国产精品初高中精品久久| 91精品在线免费视频| 国产99久久精品一区二区| 欧美人与禽性xxxxx杂性| 色吧影院999| 黄色软件在线| 日韩精品视频在线观看网址| 国产麻豆免费视频| 在线播放日韩导航| 亚洲天堂aaa| 欧美吻胸吃奶大尺度电影 | 一女三黑人理论片在线| 成人综合在线视频| 国内精品国产三级国产aⅴ久| 美女视频黄久久| 别急慢慢来1978如如2| 欧美一区=区| 免费看一级大黄情大片| 99香蕉国产精品偷在线观看| 国产a级片网站| 精品成人在线| 999在线观看视频| 国产经典三级在线| 国产日韩欧美在线一区| 在线免费播放av| av成人免费在线| 久久一区二区电影| 91蜜桃视频在线| 日本免费福利视频| 久久蜜桃av一区精品变态类天堂| 91精品小视频| 久久免费视频色| 国产亚洲精品熟女国产成人| 国产亚洲一本大道中文在线| 国产中年熟女高潮大集合| 久久综合九色综合欧美亚洲| 成人精品999| 中文字幕久久午夜不卡| 成人一级片免费看| 中文字幕视频一区二区三区久| 最新av电影网站| 亚洲一区二区三区四区的| 国产一级一级片| 欧美性生活大片免费观看网址| 亚洲黄网在线观看| 欧美视频在线观看一区| 91成人在线免费| 日韩一区二区在线观看视频播放| 成人黄色免费视频| 日韩精品免费综合视频在线播放 | 久久这里只有精品9| 欧美视频第二页| 成人一区二区av| 欧美三级网站| 国产成人综合一区二区三区| 电影在线观看一区二区| 91久久精品国产91性色| 精品成人自拍视频| 亚洲成人蜜桃| 国产综合精品| 国产一区视频免费观看| 韩日av一区二区| 小毛片在线观看| 国产精品午夜免费| 九九热国产精品视频| 色悠悠久久综合| 国产日韩一级片| 亚洲精品中文字| 成人免费视屏| 欧洲成人在线视频| 999色成人| 久久久久综合一区二区三区| 色一区二区三区四区| 大西瓜av在线| 免费在线观看日韩欧美| 性活交片大全免费看| 欧美激情在线一区二区| 国产亚洲精久久久久久无码77777| 色哟哟亚洲精品| 午夜精品久久久久久久爽| 亚洲色图第三页| 9lporm自拍视频区在线| 91精品久久久久久久久久另类 | 日韩精品一区在线| 黄色在线网站| 91精品亚洲| 亚洲高清乱码| av不卡在线| xxx中文字幕| 欧美国产精品中文字幕| 国产午夜视频在线播放| 欧美日韩精品一区二区在线播放| 乱色精品无码一区二区国产盗| 日韩在线免费视频| 欧美电影网站| 国产亚洲自拍偷拍| 最新国产精品| 成年网站免费在线观看| 久久精品一级爱片| 日韩av一二三区| 日韩欧美国产综合一区| 天堂中文а√在线| 国产精品久久久久国产a级| 婷婷亚洲精品| 日本www在线视频| 国产成人av电影| 日韩影院一区二区| 欧美精品在欧美一区二区少妇 | 正在播放国产一区| gay欧美网站| 久久久久se| 国产一区导航| a视频免费观看| 精品久久久久久国产| 日本精品999| 国内精品400部情侣激情| 日韩在线成人| 99久久99久久精品| 国产精品66部| 激情五月少妇a| 成人在线免费av| 成人黄色片网站| 色135综合网| 奇米影视四色在线| 中文字幕中文在线不卡住| 中文字幕人妻精品一区| 中文在线不卡视频| 日韩色性视频| 韩国黄色一级大片| 国产一区二区伦理片| 人妻人人澡人人添人人爽| 欧美一区二区大片| 美女日批视频在线观看| 成人三级在线| 中文亚洲欧美| 男人天堂av电影| 欧美日韩午夜在线视频| 色哟哟免费在线观看| 亚洲一区久久久| 亚洲精品看片| 自拍偷拍亚洲天堂| 欧美性猛交xxxxxx富婆| 成a人v在线播放| 91最新在线免费观看| 欧美女激情福利| 国产精品无码电影| 在线视频一区二区三区| 日本中文字幕在线播放| www.成人av| 国产日韩欧美一区在线| 性欧美精品男男| 67194成人在线观看| 久久99亚洲网美利坚合众国| 久久99欧美| 麻豆精品久久久| 久久久全国免费视频| 精品一区电影国产| 日日夜夜一区| 国产96在线 | 亚洲| www.av在线| 91av在线精品| 日韩啪啪电影网| 国产人妻精品午夜福利免费| 精品福利一区二区| 日本免费在线观看| 国内一区二区在线视频观看| 久久亚洲不卡| www.xxxx日本| 日韩精品在线视频美女| 免费成人黄色网| 性欧美大战久久久久久久| 中文字幕精品三区| 亚洲第一视频在线播放| 国产成人久久久| 精品动漫一区| 女同久久另类69精品国产| 亚洲国产古装精品网站| 国产成人免费精品| 欧美极品欧美精品欧美| 18涩涩午夜精品.www| 免费在线黄色影片| 99国产超薄丝袜足j在线观看 | 五十路在线视频|