柚子快報(bào)邀請(qǐng)碼778899分享:開發(fā)語言 Bash腳本用法總結(jié)
柚子快報(bào)邀請(qǐng)碼778899分享:開發(fā)語言 Bash腳本用法總結(jié)
Bash 腳本有兩個(gè)部分:bash和script。Bash 是一個(gè) Unix shell,由 GNU 項(xiàng)目開發(fā)。腳本只是一組在文件中編寫并使用 bash 執(zhí)行的命令。Bash 不是市場(chǎng)上唯一的 shell,但它是最受歡迎的 shell。
一、引言
Bash腳本是由命令行指令和腳本語言語法構(gòu)成的一種強(qiáng)大工具,用于自動(dòng)化執(zhí)行各種任務(wù)。作為Unix和Linux系統(tǒng)的默認(rèn)命令行解釋器,Bash(Bourne Again SHell)在系統(tǒng)管理、批處理操作以及應(yīng)用程序開發(fā)中扮演著至關(guān)重要的角色。通過編寫B(tài)ash腳本,用戶可以簡(jiǎn)化日常重復(fù)性操作,提升工作效率,并減少人為錯(cuò)誤的可能性。
Bash腳本不僅適用于系統(tǒng)管理員和開發(fā)人員,任何希望在Linux或MacOS環(huán)境中實(shí)現(xiàn)任務(wù)自動(dòng)化的用戶都可以從中受益。無論是定時(shí)備份重要數(shù)據(jù)、批量處理文件、監(jiān)控系統(tǒng)性能,還是部署應(yīng)用程序,Bash腳本都提供了一種簡(jiǎn)潔而高效的解決方案。
Bash是Bourne Again SHell的縮寫,是一種UNIX shell和命令語言,作為GNU操作系統(tǒng)的一部分被廣泛使用。它是由Brian Fox為GNU項(xiàng)目編寫的自由軟件,是Bourne Shell(sh)的替代品,并兼容sh的語法,同時(shí)增加了許多增強(qiáng)功能。Bash不僅可以作為命令行界面使用,還可以用于編寫腳本,自動(dòng)化處理一系列任務(wù)。
二、基礎(chǔ)語法
1. 基本構(gòu)成
第一行必須是 #!/bin/bash注釋使用 # 開頭執(zhí)行腳本使用 ./腳本名 或者 bash 腳本名
#!/bin/bash
# 這是注釋
# 聲明變量并打印
my_var="Hello, World!"
echo $my_var
# 獲取輸入并打印
read -p "Enter your first name: " firstname
read -p "Enter your last name: " lastname
echo "Hello, $firstname $lastname!"
2. 變量類型
自定義變量:
字符變量數(shù)組變量關(guān)聯(lián)數(shù)組 系統(tǒng)變量:內(nèi)建變量:
$IFS: 內(nèi)部字段分隔符,用于拆分字符串$LINENO: 當(dāng)前腳本行號(hào)$OLDPWD: 前一個(gè)工作目錄$PWD: 當(dāng)前工作目錄$RANDOM: 生成一個(gè)隨機(jī)數(shù)$SECONDS: 腳本運(yùn)行的秒數(shù)$UID: 當(dāng)前用戶的用戶ID 特殊變量:
$0: 腳本的名稱$1, $2, …: 傳遞給腳本的參數(shù)$@: 所有參數(shù)的列表$#: 參數(shù)的個(gè)數(shù)$?: 上一個(gè)命令的退出狀態(tài)$$: 當(dāng)前腳本的進(jìn)程ID$!: 最后一個(gè)后臺(tái)進(jìn)程的進(jìn)程ID$_: 最后一個(gè)命令的最后一個(gè)參數(shù)或最后一個(gè)命令的輸出
3. 常見命令
echo: 輸出字符串到終端。 echo "Hello, World!"
ls: 列出目錄內(nèi)容。 ls
cd: 改變當(dāng)前目錄。 cd /path/to/directory
cp: 復(fù)制文件或目錄。 cp source_file destination
mv: 移動(dòng)或重命名文件或目錄。 mv old_name new_name
rm: 刪除文件或目錄。 rm filename
touch: 創(chuàng)建一個(gè)空文件或更新文件的修改時(shí)間。 touch newfile.txt
mkdir: 創(chuàng)建新目錄。 mkdir new_directory
輸入重定向: 將文件內(nèi)容作為命令的輸入。 command < inputfile
輸出重定向: 將命令的輸出寫入文件。 command > outputfile
追加輸出: 將命令的輸出追加到文件末尾。 command >> outputfile
錯(cuò)誤輸出重定向: 將錯(cuò)誤信息寫入文件。 command 2> errorfile
管道: 將一個(gè)命令的輸出作為另一個(gè)命令的輸入。 command1 | command2
例如,將ls命令的輸出通過管道傳遞給grep命令進(jìn)行過濾: ls | grep "pattern"
三、控制結(jié)構(gòu)
1. 條件判斷
Bash腳本中常用的條件判斷包括if語句、case語句等。
if語句: 用于條件判斷。 if [ condition ]; then
# 當(dāng)條件為真時(shí)執(zhí)行的代碼
elif [ another_condition ]; then
# 當(dāng)另一個(gè)條件為真時(shí)執(zhí)行的代碼
else
# 當(dāng)條件為假時(shí)執(zhí)行的代碼
fi
例如,判斷一個(gè)文件是否存在: if [ -f "file.txt" ]; then
echo "file.txt exists."
else
echo "file.txt does not exist."
fi
case語句: 用于多分支條件判斷。 case $variable in
pattern1)
# 當(dāng)變量匹配pattern1時(shí)執(zhí)行的代碼
;;
pattern2)
# 當(dāng)變量匹配pattern2時(shí)執(zhí)行的代碼
;;
*)
# 當(dāng)變量不匹配上述任意模式時(shí)執(zhí)行的代碼
;;
esac
例如,根據(jù)輸入的值執(zhí)行不同的操作: read -p "Enter a number: " number
case $number in
1)
echo "You entered one."
;;
2)
echo "You entered two."
;;
*)
echo "You entered something else."
;;
esac
2. 循環(huán)結(jié)構(gòu)
Bash腳本中常用的循環(huán)結(jié)構(gòu)包括for循環(huán)、while循環(huán)等。
for循環(huán): 用于遍歷列表中的每一個(gè)元素。 for variable in list; do
# 對(duì)于列表中的每一個(gè)元素執(zhí)行的代碼
done
例如,遍歷數(shù)字1到5: for i in {1..5}; do
echo "Number: $i"
done
while循環(huán): 用于在條件為真時(shí)反復(fù)執(zhí)行代碼。 while [ condition ]; do
# 當(dāng)條件為真時(shí)執(zhí)行的代碼
done
例如,循環(huán)輸出直到變量等于5: count=1
while [ $count -le 5 ]; do
echo "Count: $count"
((count++))
done
until循環(huán): 與while循環(huán)相反,用于在條件為假時(shí)反復(fù)執(zhí)行代碼。 until [ condition ]; do
# 當(dāng)條件為假時(shí)執(zhí)行的代碼
done
例如,循環(huán)輸出直到變量等于5: count=1
until [ $count -gt 5 ]; do
echo "Count: $count"
((count++))
done
四、函數(shù)
Bash腳本中的函數(shù)是一組可以重復(fù)使用的命令和語句塊,可以接受參數(shù)并返回值。使用函數(shù)可以提高腳本的可讀性和可維護(hù)性,減少代碼重復(fù)。
#!/bin/bash
# 定義函數(shù)
greet() {
local name=$1
echo "Hello, $name!"
}
add() {
local num1=$1
local num2=$2
local sum=$(( num1 + num2 ))
echo $sum
}
# 調(diào)用函數(shù)
greet "Alice"
result=$(add 10 20)
echo "Sum: $result"
# 使用帶參數(shù)的函數(shù)
calculate_area() {
local length=$1
local width=$2
local area=$(( length * width ))
echo $area
}
area=$(calculate_area 5 10)
echo "Area: $area"
1. 定義函數(shù)
函數(shù)的定義非常簡(jiǎn)單,通常使用以下兩種方式之一:
function_name() {
# 函數(shù)體
}
# 或者
function function_name {
# 函數(shù)體
}
2. 調(diào)用函數(shù)
定義函數(shù)后,可以通過函數(shù)名來調(diào)用它:
function_name
3. 函數(shù)參數(shù)
函數(shù)可以接受參數(shù),這些參數(shù)在函數(shù)體內(nèi)通過位置參數(shù)變量 $1, $2, … 來訪問。
greet() {
echo "Hello, $1!"
}
greet "Alice"
在這個(gè)例子中,函數(shù) greet 接受一個(gè)參數(shù)并輸出問候語。
4. 返回值
函數(shù)可以通過 return 語句返回一個(gè)整數(shù)值,表示函數(shù)的退出狀態(tài)。也可以通過修改全局變量或使用 echo 輸出值來返回字符串或其他類型的數(shù)據(jù)。
add() {
result=$(( $1 + $2 ))
return $result
}
add 3 5
sum=$?
echo "Sum: $sum"
在這個(gè)例子中,函數(shù) add 返回兩個(gè)參數(shù)的和,并使用 $? 獲取返回值。
concat() {
echo "$1 $2"
}
result=$(concat "Hello" "World")
echo $result
在這個(gè)例子中,函數(shù) concat 返回兩個(gè)參數(shù)的拼接結(jié)果,并使用命令替換 $(...) 獲取返回值。
5. 局部變量
在函數(shù)內(nèi)部定義局部變量時(shí),可以使用 local 關(guān)鍵字,避免變量污染全局命名空間。
calculate_square() {
local num=$1
local square=$(( num * num ))
echo $square
}
result=$(calculate_square 4)
echo "Square: $result"
在這個(gè)例子中,變量 num 和 square 是局部變量,僅在函數(shù) calculate_square 內(nèi)部可見。
五、數(shù)組
1. 普通數(shù)組
# 定義及使用
my_array=(apple banana cherry)
echo ${my_array[0]} # 輸出apple
echo ${my_array[1]} # 輸出banana
echo ${my_array[@]} # 輸出所有元素
# 修改數(shù)組指定值
my_array[3]="date"
echo ${my_array[3]} # 輸出date
2. 關(guān)聯(lián)數(shù)組
# 創(chuàng)建關(guān)聯(lián)數(shù)組
declare -A my_assoc_array
my_assoc_array=([name]="Alice" [age]=30)
echo ${my_assoc_array[name]} # 輸出Alice
echo ${my_assoc_array[age]} # 輸出30
六、字符串
1. 定義和使用
字符串可以直接賦值給變量,用雙引號(hào)或單引號(hào)包圍。
str1="Hello, World!"
str2='Hello, Bash!'
echo $str1
echo $str2
2. 字符串連接
通過簡(jiǎn)單的拼接或使用+=操作符連接字符串。
str1="Hello,"
str2=" World!"
str3="$str1$str2"
echo $str3
str1+=" Bash!"
echo $str1
3. 獲取字符串長(zhǎng)度
使用${#variable}語法獲取字符串長(zhǎng)度。
str="Hello, World!"
length=${#str}
echo "Length: $length"
4. 字符串截取
使用${variable:offset:length}語法截取字符串的子字符串。
str="Hello, World!"
substring=${str:7:5} # 從索引7開始,截取5個(gè)字符
echo $substring # 輸出 "World"
5. 字符串查找和替換
使用${variable/pattern/replacement}語法查找和替換字符串中的內(nèi)容。
str="Hello, World!"
new_str=${str/World/Bash}
echo $new_str # 輸出 "Hello, Bash!"
要替換所有匹配的字符串,可以使用${variable//pattern/replacement}。
str="Hello, World! Welcome to the World!"
new_str=${str//World/Bash}
echo $new_str # 輸出 "Hello, Bash! Welcome to the Bash!"
6. 字符串比較
使用==或!=進(jìn)行字符串比較。
str1="Hello"
str2="World"
if [ "$str1" == "$str2" ]; then
echo "Strings are equal"
else
echo "Strings are not equal"
fi
7. 字符串模式匹配
使用通配符進(jìn)行模式匹配。
str="Hello, World!"
if [[ $str == H* ]]; then
echo "String starts with 'H'"
fi
8. 字符串分割
使用IFS(內(nèi)部字段分隔符)將字符串分割成數(shù)組。
str="one,two,three"
IFS=',' read -r -a array <<< "$str"
echo "First element: ${array[0]}"
echo "Second element: ${array[1]}"
echo "Third element: ${array[2]}"
9. 字符串大小寫轉(zhuǎn)換
Bash不直接支持大小寫轉(zhuǎn)換,但可以通過調(diào)用其他工具(如tr)實(shí)現(xiàn)。
str="Hello, World!"
lowercase=$(echo $str | tr 'A-Z' 'a-z')
uppercase=$(echo $str | tr 'a-z' 'A-Z')
echo "Lowercase: $lowercase"
echo "Uppercase: $uppercase"
10. 示例綜合
以下是一個(gè)綜合示例,展示了上述各種字符串操作的用法:
#!/bin/bash
# 定義字符串
str1="Hello,"
str2=" World!"
str3="$str1$str2"
echo $str3 # 輸出 "Hello, World!"
# 獲取字符串長(zhǎng)度
length=${#str3}
echo "Length: $length" # 輸出字符串長(zhǎng)度
# 字符串截取
substring=${str3:7:5}
echo "Substring: $substring" # 輸出 "World"
# 字符串查找和替換
new_str=${str3/World/Bash}
echo "Replaced: $new_str" # 輸出 "Hello, Bash!"
# 字符串比較
if [ "$str1" == "$str2" ]; then
echo "Strings are equal"
else
echo "Strings are not equal"
fi
# 字符串模式匹配
if [[ $str3 == H* ]]; then
echo "String starts with 'H'"
fi
# 字符串分割
str="one,two,three"
IFS=',' read -r -a array <<< "$str"
echo "First element: ${array[0]}" # 輸出 "one"
echo "Second element: ${array[1]}" # 輸出 "two"
echo "Third element: ${array[2]}" # 輸出 "three"
# 字符串大小寫轉(zhuǎn)換
lowercase=$(echo $str3 | tr 'A-Z' 'a-z')
uppercase=$(echo $str3 | tr 'a-z' 'A-Z')
echo "Lowercase: $lowercase" # 輸出 "hello, world!"
echo "Uppercase: $uppercase" # 輸出 "HELLO, WORLD!"
七、文件操作
以下是一個(gè)綜合示例,展示了如何進(jìn)行文件的創(chuàng)建、讀取、寫入、刪除等操作。
#!/bin/bash
# 創(chuàng)建文件
touch myfile.txt
echo "File created: myfile.txt"
# 寫入文件
echo "Hello, World!" > myfile.txt
echo "Written to file: myfile.txt"
# 追加寫入文件
echo "Hello, again!" >> myfile.txt
echo "Appended to file: myfile.txt"
# 讀取文件
echo "Contents of myfile.txt:"
cat myfile.txt
# 逐行讀取文件
echo "Reading file line by line:"
while IFS= read -r line; do
echo "$line"
done < "myfile.txt"
# 檢查文件是否存在
if [ -f "myfile.txt" ]; then
echo "File exists: myfile.txt"
else
echo "File does not exist: myfile.txt"
fi
# 獲取文件信息
echo "File information:"
stat myfile.txt
# 修改文件權(quán)限
chmod 644 myfile.txt
echo "File permissions changed: myfile.txt"
# 重命名文件
mv myfile.txt mynewfile.txt
echo "File renamed to: mynewfile.txt"
# 刪除文件
rm mynewfile.txt
echo "File deleted: mynewfile.txt"
# 查找文件
echo "Finding file:"
find . -name "mynewfile.txt"
1. 文件創(chuàng)建
使用touch命令可以創(chuàng)建一個(gè)空文件,或者更新一個(gè)文件的修改時(shí)間。
touch filename.txt
2. 文件讀取
使用cat、less、more等命令可以讀取文件內(nèi)容。
cat filename.txt
使用while循環(huán)逐行讀取文件
while IFS= read -r line; do
echo "$line"
done < "filename.txt"
3. 文件寫入
使用重定向符號(hào)>可以將輸出寫入文件,使用>>可以追加寫入文件。
echo "Hello, World!" > filename.txt # 覆蓋寫入
echo "Hello, again!" >> filename.txt # 追加寫入
使用tee命令可以同時(shí)將輸出寫入文件和顯示在終端
echo "Hello, World!" | tee filename.txt
echo "Hello, again!" | tee -a filename.txt
4. 文件刪除
使用rm命令可以刪除文件。
rm filename.txt
5. 文件重命名和移動(dòng)
使用mv命令可以重命名或移動(dòng)文件。
mv oldname.txt newname.txt # 重命名
mv filename.txt /path/to/directory/ # 移動(dòng)
6. 檢查文件是否存在
使用條件判斷可以檢查文件是否存在。
if [ -f "filename.txt" ]; then
echo "File exists."
else
echo "File does not exist."
fi
7. 獲取文件信息
使用stat命令可以獲取文件的詳細(xì)信息。
stat filename.txt
使用ls -l命令可以獲取文件的權(quán)限、大小等信息。
ls -l filename.txt
8. 文件權(quán)限操作
使用chmod命令可以修改文件權(quán)限。
chmod 644 filename.txt # 設(shè)定文件權(quán)限
9. 文件查找
使用find命令可以查找文件。
find /path/to/directory -name "filename.txt"
八、腳本調(diào)試
1. 使用 -x 選項(xiàng)啟用調(diào)試模式
在腳本的開頭添加-x選項(xiàng),腳本在執(zhí)行時(shí)會(huì)顯示每個(gè)命令及其參數(shù)的展開結(jié)果。
#!/bin/bash -x
echo "This is a debug mode example"
var="Hello"
echo $var
也可以在運(yùn)行腳本時(shí)啟用調(diào)試模式:
bash -x script.sh
2. 使用 set 命令控制調(diào)試選項(xiàng)
set 命令提供了多種選項(xiàng)來控制腳本的調(diào)試行為:
set -x # 啟用調(diào)試模式,顯示每個(gè)命令
set +x # 關(guān)閉調(diào)試模式
set -e # 啟用腳本遇到錯(cuò)誤時(shí)立即退出
set +e # 關(guān)閉錯(cuò)誤檢測(cè),腳本繼續(xù)執(zhí)行
set -v # 啟用顯示腳本中的每一行
set +v # 關(guān)閉顯示每一行
set -u # 啟用未定義變量檢查
set +u # 關(guān)閉未定義變量檢查
示例如下:
#!/bin/bash
set -x
echo "Debugging with set -x"
var="Hello"
echo $var
set +x
3. 使用 trap 命令捕獲錯(cuò)誤和調(diào)試信息
trap 命令可以用于捕獲腳本中的錯(cuò)誤或特定事件,并執(zhí)行相應(yīng)的操作。
#!/bin/bash
trap 'echo "Error occurred at line $LINENO"; exit 1;' ERR
echo "This is a trap example"
echo $undefined_var # 這會(huì)引發(fā)錯(cuò)誤
在這個(gè)示例中,trap 捕獲 ERR 信號(hào),并在發(fā)生錯(cuò)誤時(shí)輸出錯(cuò)誤信息和行號(hào),然后退出腳本。
4. 使用 echo 和 printf 調(diào)試變量
echo 和 printf 可以用于輸出變量的值和調(diào)試信息。
#!/bin/bash
var="Hello"
echo "The value of var is: $var"
# 更精確的輸出
printf "The value of var is: %s\n" "$var"
5. 使用 debug 函數(shù)進(jìn)行調(diào)試
定義一個(gè)調(diào)試函數(shù)來簡(jiǎn)化調(diào)試信息的輸出。
debug() {
echo "Debug: $1"
}
var="Hello"
debug "The value of var is $var"
6. 使用 return 和 exit 調(diào)試
在函數(shù)中使用return,在腳本中使用exit來調(diào)試錯(cuò)誤和退出。
#!/bin/bash
my_function() {
local var="Hello"
echo "Inside function: $var"
return 1 # 你可以根據(jù)條件設(shè)置返回值
}
my_function
if [ $? -ne 0 ]; then
echo "Function returned an error"
fi
7. 使用 bash -n 命令檢查語法
bash -n 命令檢查腳本的語法而不執(zhí)行腳本。
bash -n script.sh
8. 使用 shellcheck 工具進(jìn)行靜態(tài)分析
ShellCheck 是一個(gè)靜態(tài)分析工具,可以幫助你檢查腳本中的常見錯(cuò)誤和潛在問題。
shellcheck script.sh
9. 使用 PS4 變量自定義調(diào)試輸出
PS4 變量定義了set -x模式下每條命令的前綴。
#!/bin/bash
PS4='+ ${BASH_SOURCE}:${LINENO}:${FUNCNAME[0]}: '
set -x
echo "Debugging with PS4"
var="Hello"
echo $var
在這個(gè)示例中,PS4 變量設(shè)置了調(diào)試輸出的前綴格式,包括文件名、行號(hào)和函數(shù)名。
九、常用腳本
1. 自動(dòng)備份腳本
將指定目錄的文件備份到另一個(gè)目錄中,并按日期命名備份文件夾。
#!/bin/bash
# 定義備份源目錄和目標(biāo)目錄
SOURCE_DIR="/path/to/source"
BACKUP_DIR="/path/to/backup"
DATE=$(date +'%Y-%m-%d')
# 創(chuàng)建備份文件夾
BACKUP_PATH="$BACKUP_DIR/backup-$DATE"
mkdir -p "$BACKUP_PATH"
# 復(fù)制文件
cp -r "$SOURCE_DIR"/* "$BACKUP_PATH"
# 打印備份完成信息
echo "Backup completed at $BACKUP_PATH"
2. 檢查磁盤空間
檢查磁盤空間并發(fā)送警報(bào)郵件。
#!/bin/bash
# 磁盤空間警報(bào)閾值(百分比)
THRESHOLD=80
# 檢查磁盤使用情況
USAGE=$(df / | grep / | awk '{ print $5 }' | sed 's/%//g')
if [ $USAGE -gt $THRESHOLD ]; then
echo "Disk space is above threshold: ${USAGE}%" | mail -s "Disk Space Alert" your_email@example.com
fi
3. 自動(dòng)更新系統(tǒng)
自動(dòng)更新系統(tǒng)的軟件包并進(jìn)行升級(jí)。
#!/bin/bash
# 更新軟件包列表
sudo apt update
# 升級(jí)軟件包
sudo apt upgrade -y
# 清理不需要的包
sudo apt autoremove -y
echo "System update completed."
4. 批量重命名文件
將指定目錄下的所有.txt文件擴(kuò)展名改為.md。
#!/bin/bash
# 指定目錄
TARGET_DIR="/path/to/directory"
# 循環(huán)遍歷所有.txt文件并重命名
for file in "$TARGET_DIR"/*.txt; do
mv "$file" "${file%.txt}.md"
done
echo "Renaming completed."
5. 生成隨機(jī)密碼
生成一個(gè)指定長(zhǎng)度的隨機(jī)密碼。
#!/bin/bash
# 生成隨機(jī)密碼的長(zhǎng)度
LENGTH=12
# 生成密碼
PASSWORD=$(openssl rand -base64 12)
echo "Your new password is: $PASSWORD"
6. 監(jiān)控進(jìn)程狀態(tài)
監(jiān)控特定進(jìn)程是否在運(yùn)行,如果沒有運(yùn)行則發(fā)送警報(bào)。
#!/bin/bash
# 需要監(jiān)控的進(jìn)程名
PROCESS_NAME="nginx"
# 檢查進(jìn)程是否在運(yùn)行
if pgrep $PROCESS_NAME > /dev/null
then
echo "$PROCESS_NAME is running."
else
echo "$PROCESS_NAME is not running!" | mail -s "$PROCESS_NAME Process Alert" your_email@example.com
fi
7. 定時(shí)任務(wù)腳本
使用cron定時(shí)執(zhí)行指定的腳本任務(wù)。
#!/bin/bash
# 定義任務(wù)內(nèi)容
echo "Running scheduled task at $(date)" >> /path/to/logfile.log
配置cron定時(shí)任務(wù),每天午夜運(yùn)行腳本:
0 0 * * * /path/to/this_script.sh
8. 檢查網(wǎng)絡(luò)連接
檢查主機(jī)是否可以連接到指定的IP地址或域名。
#!/bin/bash
# 目標(biāo)地址
TARGET="google.com"
# 檢查網(wǎng)絡(luò)連接
if ping -c 1 $TARGET &> /dev/null
then
echo "$TARGET is reachable."
else
echo "$TARGET is not reachable!" | mail -s "Network Alert" your_email@example.com
fi
9. 備份 MySQL 數(shù)據(jù)庫(kù)
備份MySQL數(shù)據(jù)庫(kù)到指定的目錄中。
#!/bin/bash
# MySQL數(shù)據(jù)庫(kù)連接信息
USER="your_user"
PASSWORD="your_password"
DATABASE="your_database"
BACKUP_DIR="/path/to/backup"
DATE=$(date +'%Y-%m-%d')
BACKUP_FILE="$BACKUP_DIR/${DATABASE}_backup_$DATE.sql"
# 執(zhí)行備份
mysqldump -u $USER -p$PASSWORD $DATABASE > $BACKUP_FILE
# 打印備份完成信息
echo "Database backup completed at $BACKUP_FILE"
10. 從文件中提取數(shù)據(jù)
從CSV文件中提取特定列的數(shù)據(jù)。
#!/bin/bash
# CSV文件路徑
CSV_FILE="/path/to/file.csv"
# 提取第二列數(shù)據(jù)
awk -F, '{ print $2 }' $CSV_FILE
11. 執(zhí)行遠(yuǎn)程命令
使用SSH連接到遠(yuǎn)程主機(jī)并執(zhí)行命令。
#!/bin/bash
# 遠(yuǎn)程主機(jī)信息
REMOTE_USER="user"
REMOTE_HOST="hostname_or_ip"
COMMAND="ls -l"
# 執(zhí)行遠(yuǎn)程命令
ssh $REMOTE_USER@$REMOTE_HOST "$COMMAND"
12. 查找文件中的文本
在指定目錄中查找包含特定文本的文件。
#!/bin/bash
# 查找目錄
SEARCH_DIR="/path/to/directory"
# 查找的文本
SEARCH_TEXT="search_term"
# 查找文件
grep -rl "$SEARCH_TEXT" "$SEARCH_DIR"
13. 記錄腳本執(zhí)行時(shí)間
記錄腳本的開始時(shí)間和結(jié)束時(shí)間。
#!/bin/bash
# 記錄開始時(shí)間
START_TIME=$(date +'%Y-%m-%d %H:%M:%S')
echo "Script started at $START_TIME"
# 腳本的主要內(nèi)容
sleep 5 # 模擬任務(wù)執(zhí)行
# 記錄結(jié)束時(shí)間
END_TIME=$(date +'%Y-%m-%d %H:%M:%S')
echo "Script ended at $END_TIME"
14. 自動(dòng)清理臨時(shí)文件
刪除指定目錄中的臨時(shí)文件(例如*.tmp文件)。
#!/bin/bash
# 臨時(shí)文件目錄
TEMP_DIR="/path/to/temp"
# 刪除臨時(shí)文件
rm -f "$TEMP_DIR"/*.tmp
echo "Temporary files cleaned up."
柚子快報(bào)邀請(qǐng)碼778899分享:開發(fā)語言 Bash腳本用法總結(jié)
精彩文章
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。