成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

改進你的腳本程序的五個方法

運維 系統運維
你是否曾經查看過某個軟件發行方提供的安裝用的腳本script程序?為了能夠適應不同用戶的系統配置,順利完成安裝,這些腳本程序經常包含很多函數和邏輯分支。多年來,我積累了一些改進腳本程序的一些技巧,這里分享幾個,希望能對朋友們也有用。這里列出一組短腳本示例,展示給大家做腳本樣本。
  • 巧用 Bash 腳本程序能幫助你完成很多極具挑戰的任務。

系統管理員經常寫腳本程序,不論長短,這些腳本可以完成某種任務。

你是否曾經查看過某個軟件發行方提供的安裝用的腳本script程序?為了能夠適應不同用戶的系統配置,順利完成安裝,這些腳本程序經常包含很多函數和邏輯分支。多年來,我積累了一些改進腳本程序的一些技巧,這里分享幾個,希望能對朋友們也有用。這里列出一組短腳本示例,展示給大家做腳本樣本。

[[419373]]

初步嘗試

我嘗試寫一個腳本程序時,原始程序往往就是一組命令行,通常就是調用標準命令完成諸如更新網頁內容之類的工作,這樣可以節省時間。其中一個類似的工作是解壓文件到 Apache 網站服務器的主目錄里,我的最初腳本程序大概是下面這樣:

  1. cp january_schedule.tar.gz /usr/apache/home/calendar/ 
  2. cd /usr/apache/home/calendar/ 
  3. tar zvxf january_schedule.tar.gz 

這幫我節省了時間,也減少了鍵入多條命令操作。時日久了,我掌握了另外的技巧,可以用 Bash 腳本程序完成更難的一些工作,比如說創建軟件安裝包、安裝軟件、備份文件系統等工作。

1、條件分支結構

和眾多其他編程語言一樣,腳本程序的條件分支結構同樣是強大的常用技能。條件分支結構賦予了計算機程序邏輯能力,我的很多實例都是基于條件邏輯分支。

基本的條件分支結構就是 if 條件分支結構。通過判定是否滿足特定條件,可以控制程序選擇執行相應的腳本命令段。比如說,想要判斷系統是否安裝了 Java ,可以通過判斷系統有沒有一個 Java 庫目錄;如果找到這個目錄,就把這個目錄路徑添加到可運行程序路徑,也就可以調用 Java 庫應用了。

if [ -d "$JAVA_HOME/bin" ] ; then PATH="$JAVA_HOME/bin:$PATH"

2、限定運行權限

你或許想只允許特定的用戶才能執行某個腳本程序。除了 Linux 的權限許可管理,比如對用戶和用戶組設定權限、通過 SELinux 設定此類的保護權限等,你還可以在腳本里設置邏輯判斷來設置執行權限。類似的情況可能是,你需要確保只有網站程序的所有者才能執行相應的網站初始化操作腳本。甚至你可以限定只有 root 用戶才能執行某個腳本。這個可以通過在腳本程序里設置邏輯判斷實現,Linux 提供的幾個環境變量可以幫忙。其中一個是保存用戶名稱的變量 $USER, 另一個是保存用戶識別碼的變量 $UID 。在腳本程序里,執行用戶的 UID 值就保存在 $UID 變量里。

用戶名判別

第一個例子里,我在一個帶有幾個應用服務器實例的多用戶環境里指定只有用戶 jboss1 可以執行腳本程序。條件 if 語句主要是判斷,“要求執行這個腳本程序的用戶不是 jboss1 嗎?”當此條件為真時,就會調用第一個 echo 語句,接著是 exit 1,即退出這個腳本程序。

  1. if [ "$USER" != 'jboss1' ]; then 
  2.      echo "Sorry, this script must be run as JBOSS1!" 
  3.      exit 1 
  4. fi 
  5. echo "continue script" 

根用戶判別

接下來的例子是要求只有根用戶才能執行腳本程序。根用戶的用戶識別碼(UID)是 0,設置的條件判斷采用大于操作符(-gt),所有 UID 值大于 0 的用戶都被禁止執行該腳本程序。

  1. if [ "$UID" -gt 0 ]; then 
  2.      echo "Sorry, this script must be run as ROOT!" 
  3.      exit 1 
  4. fi 
  5. echo "continue script" 

3、帶參數執行程序

可執行程序可以附帶參數作為執行選項,命令行腳本程序也是一樣,下面給出幾個例子。在這之前,我想告訴你,能寫出好的程序并不只是寫出我們想要它執行什么的程序,程序還需要不執行我們不要它執行的操作。如果運行程序時沒有提供參數造成程序缺少足夠信息,我愿意腳本程序不要做任何破壞性的操作。因而,程序的第一步就是確認命令行是否提供了參數,判定的條件就是參數數量 $# 是否為 0 ,如果是(意味著沒有提供參數),就直接終止腳本程序并退出操作。

  1. if [ $# -eq 0 ]; then 
  2.     echo "No arguments provided" 
  3.     exit 1 
  4. fi 
  5. echo "arguments found: $#" 

多個運行參數

可以傳遞給腳本程序的參數不止一個。腳本使用內部變量指代這些參數,內部變量名用非負整數遞增標識,也就是 $1、$2、$3 等等遞增。我只是擴展前面的程序,并在下面一行輸出顯示用戶提供的前三個參數。顯然,要針對所有的每個參數有對應的響應需要更多的邏輯判斷,這里的例子只是簡單展示參數的使用。

  1. echo $1 $2 $3 

我們在討論這些參數變量名,你或許有個疑問,“參數變量名怎么跳過了 $0,(而直接從$1 開始)?”

是的,是這樣,這是有原因的。變量名 $0 確實存在,也非常有用,它儲存的是被執行的腳本程序的名稱。

  1. echo $0 

程序執行過程中有一個變量名指代程序名稱,很重要的一個原因是,可以在生成的日志文件名稱里包含程序名稱,最簡單的方式應該是調用一個 echo 語句。

  1. echo test >> $0.log 

當然,你或許要增加一些代碼,確保這個日志文件存放在你希望的路徑,日志名稱包含你認為有用的信息。

4、交互輸入

腳本程序的另一個好用的特性是可以在執行過程中接受輸入,最簡單的情況是讓用戶可以輸入一些信息。

  1. echo "enter a word please:" 
  2. read word 
  3. echo $word 

這樣也可以讓用戶在程序執行中作出選擇。

  1. read -p "Install Software ?? [Y/n]: " answ 
  2. if [ "$answ" == 'n' ]; then 
  3.     exit 1 
  4. fi 
  5.     echo "Installation starting..." 

5、出錯退出執行

幾年前,我寫了個腳本,想在自己的電腦上安裝最新版本的 Java 開發工具包(JDK)。這個腳本把 JDK 文件解壓到指定目錄,創建更新一些符號鏈接,再做一下設置告訴系統使用這個最新的版本。如果解壓過程出現錯誤,在執行后面的操作就會使整個系統上的 Java 破壞不能使用。因而,這種情況下需要終止程序。如果解壓過程沒有成功,就不應該再繼續進行之后的更新操作。下面語句段可以完成這個功能。

  1. tar kxzmf jdk-8u221-linux-x64.tar.gz -C /jdk --checkpoint=.500; ec=$? 
  2. if [ $ec -ne 0 ]; then 
  3.      echo "Installation failed - exiting." 
  4.      exit 1 
  5. fi 

下面的單行語句可以給你快速展示一下變量 $? 的用法。

  1. ls T; ec=$?; echo $ec 

先用 touch T 命令創建一個文件名為 T 的文件,然后執行這個單行命令,變量 ec 的值會是 0。然后,用 rm T 命令刪除文件,再執行該單行命令,變量 ec 的值會是 2,因為文件 T 不存在,命令 ls 找不到指定文件報錯。

在邏輯條件里利用這個出錯標識,參照前文我使用的條件判斷,可以使腳本文件按需完成設定操作。

結語

要完成復雜的功能,或許我們覺得應該使用諸如 Python、C 或 Java 這類的高級編程語言,然而并不盡然,腳本編程語言也很強大,可以完成類似任務。要充分發揮腳本的作用,有很多需要學習的,希望這里的幾個例子能讓你意識到腳本編程的強大。

 

責任編輯:未麗燕 來源: Linux中國
相關推薦

2022-10-10 23:19:02

Python腳本語言工具庫

2022-03-11 15:44:11

嵌入式開發技巧技術

2023-06-05 11:40:23

2021-12-27 14:43:16

elementary Linux發行版

2024-10-11 09:04:55

2023-06-26 08:06:39

重構代碼冗余

2009-03-19 10:16:06

2014-09-12 09:58:45

2013-04-18 14:54:08

Linux監控腳本Linux監控

2022-03-17 13:44:30

Git命令管理

2025-02-11 00:00:50

2021-09-26 09:09:20

開源APP程序員

2021-08-09 14:47:34

Go語言開發

2023-05-17 18:54:07

Linux代碼

2011-04-13 09:06:31

JavaScript

2013-04-10 09:35:22

程序員

2016-03-04 11:06:20

更優秀程序員

2022-05-05 11:21:00

程序優化

2017-11-10 14:00:39

Riverbed應用程序網絡性能

2022-09-16 07:24:12

Python 的四舍
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲午夜视频在线观看 | 亚洲欧美中文日韩在线v日本 | 日韩欧美成人一区二区三区 | 国产成人网 | 午夜精品久久久久久久久久久久 | 亚洲在线成人 | 欧美一区免费 | 狠狠干av| 久久精品视频免费观看 | 久久久久久国产精品 | 一区二区三区亚洲精品国 | 玖玖色在线视频 | 秋霞电影一区二区三区 | 精品中文字幕一区二区三区 | 欧美日本久久 | 久久草在线视频 | 免费高潮视频95在线观看网站 | 欧美mv日韩mv国产网站91进入 | 一区二区三区四区电影 | 久久久久久久久99 | 欧美日韩网站 | 中文字幕av一区 | 99免费在线观看 | 色888www视频在线观看 | 精品av| 日本不卡高字幕在线2019 | 99精品视频在线观看 | 久草网址 | 日韩在线一区二区三区 | 日韩欧美二区 | 国产欧美精品一区二区 | 久久无毛 | 中文字幕一区二区三区在线乱码 | 亚洲精品国产成人 | 国产视频久久久 | www亚洲免费国内精品 | 国产一区二区三区免费 | 日韩av美女电影 | 黑人巨大精品欧美一区二区一视频 | 久久区二区 | 毛片免费看的 |