電腦識(shí)別碼怎么修改_電腦識(shí)別碼怎么修改密碼
巧用 Bash 腳本程序能幫助你完成很多極具挑戰(zhàn)的任務(wù)。
系統(tǒng)管理員經(jīng)常寫腳本程序,不論長短,這些腳本可以完成某種任務(wù)。
你是否曾經(jīng)查看過某個(gè)軟件發(fā)行方提供的安裝用的腳本script程序?為了能夠適應(yīng)不同用戶的系統(tǒng)配置,順利完成安裝,這些腳本程序經(jīng)常包含很多函數(shù)和邏輯分支。多年來,我積累了一些改進(jìn)腳本程序的一些技巧,這里分享幾個(gè),希望能對(duì)朋友們也有用。這里列出一組短腳本示例,展示給大家做腳本樣本。
我嘗試寫一個(gè)腳本程序時(shí),原始程序往往就是一組命令行,通常就是調(diào)用標(biāo)準(zhǔn)命令完成諸如更新網(wǎng)頁內(nèi)容之類的工作,這樣可以節(jié)省時(shí)間。其中一個(gè)類似的工作是解壓文件到 Apache 網(wǎng)站服務(wù)器的主目錄里,我的最初腳本程序大概是下面這樣:
這幫我節(jié)省了時(shí)間,也減少了鍵入多條命令操作。時(shí)日久了,我掌握了另外的技巧,可以用 Bash 腳本程序完成更難的一些工作,比如說創(chuàng)建軟件安裝包、安裝軟件、備份文件系統(tǒng)等工作。
和眾多其他編程語言一樣,腳本程序的條件分支結(jié)構(gòu)同樣是強(qiáng)大的常用技能。條件分支結(jié)構(gòu)賦予了計(jì)算機(jī)程序邏輯能力,我的很多實(shí)例都是基于條件邏輯分支。
基本的條件分支結(jié)構(gòu)就是 條件分支結(jié)構(gòu)。通過判定是否滿足特定條件,可以控制程序選擇執(zhí)行相應(yīng)的腳本命令段。比如說,想要判斷系統(tǒng)是否安裝了 Java ,可以通過判斷系統(tǒng)有沒有一個(gè) Java 庫目錄;如果找到這個(gè)目錄,就把這個(gè)目錄路徑添加到可運(yùn)行程序路徑,也就可以調(diào)用 Java 庫應(yīng)用了。
你或許想只允許特定的用戶才能執(zhí)行某個(gè)腳本程序。除了 Linux 的權(quán)限許可管理,比如對(duì)用戶和用戶組設(shè)定權(quán)限、通過 SELinux 設(shè)定此類的保護(hù)權(quán)限等,你還可以在腳本里設(shè)置邏輯判斷來設(shè)置執(zhí)行權(quán)限。類似的情況可能是,你需要確保只有網(wǎng)站程序的所有者才能執(zhí)行相應(yīng)的網(wǎng)站初始化操作腳本。甚至你可以限定只有 root 用戶才能執(zhí)行某個(gè)腳本。這個(gè)可以通過在腳本程序里設(shè)置邏輯判斷實(shí)現(xiàn),Linux 提供的幾個(gè)環(huán)境變量可以幫忙。其中一個(gè)是保存用戶名稱的變量 , 另一個(gè)是保存用戶識(shí)別碼的變量。在腳本程序里,執(zhí)行用戶的 UID 值就保存在變量里。
第一個(gè)例子里,我在一個(gè)帶有幾個(gè)應(yīng)用服務(wù)器實(shí)例的多用戶環(huán)境里指定只有用戶 可以執(zhí)行腳本程序。條件語句主要是判斷,“要求執(zhí)行這個(gè)腳本程序的用戶不是嗎?”當(dāng)此條件為真時(shí),就會(huì)調(diào)用第一個(gè)語句,接著是,即退出這個(gè)腳本程序。
接下來的例子是要求只有根用戶才能執(zhí)行腳本程序。根用戶的用戶識(shí)別碼(UID)是 0,設(shè)置的條件判斷采用大于操作符(),所有 UID 值大于 0 的用戶都被禁止執(zhí)行該腳本程序。
可執(zhí)行程序可以附帶參數(shù)作為執(zhí)行選項(xiàng),命令行腳本程序也是一樣,下面給出幾個(gè)例子。在這之前,我想告訴你,能寫出好的程序并不只是寫出我們想要它執(zhí)行什么的程序,程序還需要不執(zhí)行我們不要它執(zhí)行的操作。如果運(yùn)行程序時(shí)沒有提供參數(shù)造成程序缺少足夠信息,我愿意腳本程序不要做任何破壞性的操作。因而,程序的第一步就是確認(rèn)命令行是否提供了參數(shù),判定的條件就是參數(shù)數(shù)量 是否為 0 ,如果是(意味著沒有提供參數(shù)),就直接終止腳本程序并退出操作。
可以傳遞給腳本程序的參數(shù)不止一個(gè)。腳本使用內(nèi)部變量指代這些參數(shù),內(nèi)部變量名用非負(fù)整數(shù)遞增標(biāo)識(shí),也就是 、、等等遞增。我只是擴(kuò)展前面的程序,并在下面一行輸出顯示用戶提供的前三個(gè)參數(shù)。顯然,要針對(duì)所有的每個(gè)參數(shù)有對(duì)應(yīng)的響應(yīng)需要更多的邏輯判斷,這里的例子只是簡單展示參數(shù)的使用。
我們?cè)谟懻撨@些參數(shù)變量名,你或許有個(gè)疑問,“參數(shù)變量名怎么跳過了 ,(而直接從開始)?”
是的,是這樣,這是有原因的。變量名 確實(shí)存在,也非常有用,它儲(chǔ)存的是被執(zhí)行的腳本程序的名稱。
程序執(zhí)行過程中有一個(gè)變量名指代程序名稱,很重要的一個(gè)原因是,可以在生成的日志文件名稱里包含程序名稱,最簡單的方式應(yīng)該是調(diào)用一個(gè) 語句。
當(dāng)然,你或許要增加一些代碼,確保這個(gè)日志文件存放在你希望的路徑,日志名稱包含你認(rèn)為有用的信息。
腳本程序的另一個(gè)好用的特性是可以在執(zhí)行過程中接受輸入,最簡單的情況是讓用戶可以輸入一些信息。
這樣也可以讓用戶在程序執(zhí)行中作出選擇。
幾年前,我寫了個(gè)腳本,想在自己的電腦上安裝最新版本的 Java 開發(fā)工具包(JDK)。這個(gè)腳本把 JDK 文件解壓到指定目錄,創(chuàng)建更新一些符號(hào)鏈接,再做一下設(shè)置告訴系統(tǒng)使用這個(gè)最新的版本。如果解壓過程出現(xiàn)錯(cuò)誤,在執(zhí)行后面的操作就會(huì)使整個(gè)系統(tǒng)上的 Java 破壞不能使用。因而,這種情況下需要終止程序。如果解壓過程沒有成功,就不應(yīng)該再繼續(xù)進(jìn)行之后的更新操作。下面語句段可以完成這個(gè)功能。
下面的單行語句可以給你快速展示一下變量 的用法。
先用 命令創(chuàng)建一個(gè)文件名為的文件,然后執(zhí)行這個(gè)單行命令,變量的值會(huì)是 0。然后,用命令刪除文件,再執(zhí)行該單行命令,變量的值會(huì)是 2,因?yàn)槲募淮嬖冢钫也坏街付ㄎ募?bào)錯(cuò)。
在邏輯條件里利用這個(gè)出錯(cuò)標(biāo)識(shí),參照前文我使用的條件判斷,可以使腳本文件按需完成設(shè)定操作。
要完成復(fù)雜的功能,或許我們覺得應(yīng)該使用諸如 Python、C 或 Java 這類的高級(jí)編程語言,然而并不盡然,腳本編程語言也很強(qiáng)大,可以完成類似任務(wù)。要充分發(fā)揮腳本的作用,有很多需要學(xué)習(xí)的,希望這里的幾個(gè)例子能讓你意識(shí)到腳本編程的強(qiáng)大。
via: https://opensource.com/article/20/1/improve-bash-scripts
作者:Alan Formy-Duval選題:lujun9972譯者:fisherue校對(duì):wxy
本文由 LCTT原創(chuàng)編譯,Linux中國榮譽(yù)推出