如何編寫並使用典型的文字批次命令檔?
我說的是一個包含以下命令的檔案:
sudo -i
sudo apt-get update
sudo apt-get upgrade
sudo apt-get autoremove
sudo apt-get autoclean
sudo apt-get check
exit
我想我可以用 Leafpad 寫它,但...
我必須在哪裡保存它?
哪種格式?哪個名稱和副檔名?
之後,在 LXTerminal 會話中,我如何使用它,只需一個命令(理想情況下,如果有一種方法可以在每次系統啟動時自動使用它)?
非常感謝您抽出時間!
答案1
在類 UNIX 世界中不存在「批次」檔。我們使用包含“she-bangs”的腳本。要製作這樣的腳本,請開啟文字編輯器(如 Leafpad)並以以下行開頭:
#!/path/to/interpreter
/path/to/interpreter
用於解釋腳本的二進位檔案的位置在哪裡。在 Linux 中,我們通常使用「bash」(Bourne Again SHell),這是優秀的 Bourne Shell 的「演進」。 bash 所做的基本上是從 PATH 環境變數中包含的路徑(通常包括 /bin、/sbin、/usr/bin、/usr/sbin 等)運行帶有腳本中指定參數的二進位。
但除了大量選項之外,您還可以使用其他解釋器,例如 Python、Perl、Ruby、sh、csh、zsh、dash、ksh。
在她的爆炸下面是你的劇本。在您的具體情況下,要執行指定的命令,我們可以在以下腳本中使用 bash:
#!/bin/bash
# the line above sets bash as the interpreter
# note that "sudo" is not required here because we will run the script as super user later.
apt-get update
# updates APT repositories
apt-get upgrade
# check for software upgrades and upgrade them
apt-get autoremove
# remove obsolete packages
apt-get autoclean
# remove stored .deb files
apt-get check
# update package cache and check for broken dependencies
現在儲存您的文件。不需要副檔名,但出於象徵性原因,請使用 .sh 副檔名對其進行命名。我們將以超級使用者身分執行腳本,因此無需更改檔案權限。
打開終端機並 cd 到儲存腳本的路徑。假設您將其儲存為 script.sh。運行以下命令:
chmod +x script.sh
chmod
表示“更改模式”,用於更改誰可以對腳本執行什麼操作。+x
為所有使用者添加執行權限,這允許任何人運行該腳本,就好像它是任何其他程式一樣。我不會詳細列出所有不同權限的含義,但是這個問題很好地總結了它們。之後,您可以輸入:
sudo ./script.sh
不要忘記 ./ 部分,並且 .、/ 和 s 之間不要留任何空格。該sudo
命令將以 root 權限運行./script.sh
,因此需要您的密碼(當然,您必須是系統管理員)。
答案2
在 Windows 世界中稱為「批次」文件,在 *NIX 世界中稱為「腳本」。在大多數情況下,腳本是一個包含多個命令或以特定方式排列的命令的檔案。以下是您應該了解的幾件事:
基本結構
通常你會看到這樣的東西:
#!/bin/sh
# Comments
printf "Hello world"
第一行指定解釋器(通常稱為shebang
行),第二行是註解(後面的任何內容#
都不會被解釋,只是純文字),第三行是實際命令
在終端機中,您可以在沒有 shebang 行的情況下呼叫檔案。這將導致腳本被當前的 shell(又稱命令解釋器)讀取和解釋。例如,我正在運行mksh
shell。我指定#!/bin/sh
它將由 Ubuntu 的預設 shell - 運行dash
。每個 shell 都有一些關於其命令語法的細節,因此您必須相應地自訂您的腳本。
編寫腳本
這必須在文字編輯器中完成,但您也可以在 LibreOffice Writer 中編寫,然後以純文字格式儲存。就我個人而言,我只使用命令列文字編輯器(nano
大部分或vim
);這裡的類比是edit
Windows 7 之前的 Windows 版本。
檔案名稱和副檔名在 *NIX 系統上並不重要,因為系統會讀取檔案的前幾個位元組來確定其類型。我養成了添加.sh
擴展的習慣,但實際上 - 這是沒有必要的。
使腳本可執行
這是使用chmod 755 scriptName.sh
命令製作的。這意味著所有者(您)對所有者群組中的使用者(例如檔案所有者可以是,因此如果您屬於群組,則可以讀取和執行該檔案)以及其他任何人的read-write-execute
權限。永遠不要寫權限給別人!如果您擁有超級使用者權限,可能會導致一些壞的情況(也就是說您可能會被駭客攻擊,惡意使用者會更改您的腳本,以便它仍然保留您的個人資訊)。read-execute
admin
admin
read-execute
運行腳本
您始終可以透過導覽至終端中的腳本位置並鍵入 來執行腳本./scriptName
。
要在任何地方執行任何命令(包括腳本),它們必須儲存在包含在變數中的系統上的某個位置$PATH
。這就是我的意思:
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/xieerqi/bin
$PATH
變數告訴我,如果腳本或可執行二進位檔案位於/usr/local/sbin
或/usr/local/bin
或任何其他目錄中,我只需將其鍵入終端即可執行該命令。
現在,對於您自己的腳本,您應該建立bin
資料夾,並將腳本儲存在其中。如果您使用的bash
設定.profile
檔包含以下行:
# set PATH so it includes user's private bin if it exists
#if [ -d "$HOME/bin" ] ; then
# PATH="$HOME/bin:$PATH"
#fi
如果您取消註釋(刪除#
)最後三行(從if
到fi
),您的個人bin
資料夾將包含在$PATH
變數中。