Linux Shell 编程:从入门到提高
一、Shell 编程基础
什么是 Shell?
- Shell 是用户与 Linux 内核交互的命令行解释器。
- 常见的 Shell:
Bash(默认)、Zsh、Fish等。 - Shell 脚本:以
.sh结尾的文本文件,包含一系列命令。
第一个 Shell 脚本
1
2
echo "Hello, World!"#!/bin/bash(Shebang):指定脚本解释器。echo:输出内容到终端。
变量与输入输出
- 变量定义:
变量名=值(注意等号两边不能有空格)。1
2name="Alice"
echo $name # 使用变量需加$ - 输入命令:
read1
2
3echo "Enter your name:"
read name
echo "Hello, $name!"
- 变量定义:
条件判断(
if语句)1
2
3
4
5
6
7if [ 条件 ]; then
命令
elif [ 其他条件 ]; then
命令
else
命令
fi- 示例:
1
2
3
4num=10
if [ $num -gt 5 ]; then
echo "$num 大于 5"
fi
- 示例:
循环
for循环:1
2
3for i in 1 2 3; do
echo "数字: $i"
donewhile循环:1
2
3
4
5count=0
while [ $count -lt 3 ]; do
echo "计数: $count"
((count++))
done
二、Shell 提高技巧
函数定义与调用
1
2
3
4function greet() {
echo "Hello, $1!" # $1 表示第一个参数
}
greet "Bob" # 输出 "Hello, Bob!"参数处理
$0:脚本名称。$1, $2...:第1、2个参数。$#:参数总数。$@:所有参数列表。
1
2
3echo "脚本名称: $0"
echo "第一个参数: $1"
echo "参数总数: $#"字符串操作
- 拼接:
1
2
3str1="Hello"
str2="World"
result="$str1 $str2" - 截取:
1
2str="abcdef"
echo ${str:0:3} # 输出 "abc"
- 拼接:
数组
1
2
3
4arr=("apple" "banana" "cherry")
echo ${arr[1]} # 输出 "banana"
echo ${arr[@]} # 输出所有元素
echo ${#arr[@]} # 输出数组长度文件操作
- 检查文件是否存在:
1
2
3if [ -f "file.txt" ]; then
echo "文件存在"
fi - 逐行读取文件:
1
2
3while read line; do
echo "行内容: $line"
done < file.txt
- 检查文件是否存在:
正则表达式(
grep/sed)1
2
3
4
5# 使用 grep 匹配文本
echo "abc123" | grep -E "[a-z]+[0-9]+"
# 使用 sed 替换文本
echo "hello world" | sed 's/world/Linux/'调试脚本
-x参数:显示执行过程。1
bash -x script.sh
三、实例演练
备份文件
1
2
3
4
5
backup_dir="/backup"
source_dir="/home/user/docs"
timestamp=$(date +%Y%m%d)
tar -czf $backup_dir/backup_$timestamp.tar.gz $source_dir监控 CPU 使用率
1
2
3
4
5
6
cpu_threshold=80
current_cpu=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}')
if (( $(echo "$current_cpu > $cpu_threshold" | bc -l) )); then
echo "CPU 使用率过高: $current_cpu%"
fi批量重命名文件
1
2
3
4
for file in *.txt; do
mv "$file" "new_${file}"
done自动安装软件
1
2
3
4
5
6
7
if ! command -v nginx &> /dev/null; then
sudo apt-get update
sudo apt-get install -y nginx
else
echo "Nginx 已安装"
fi日志分析(提取错误日志)
1
2
grep -i "error" /var/log/syslog > errors.log
四、常见问题
权限问题:脚本需有执行权限。
1
2chmod +x script.sh
./script.sh变量作用域:默认全局,函数内使用
local定义局部变量。语法错误:注意空格(如
[ $a -eq $b ]方括号内必须有空格)。
五、学习资源
- 书籍:
- 《Linux命令行与Shell脚本编程大全》
- 《Bash Cookbook》
- 在线文档:
通过以上内容,你可以逐步掌握 Shell 编程的核心功能。多实践是提高的关键!