Shell脚本编程入门
Shell脚本编程入门
什么是Shell脚本
Shell脚本是将一系列命令写入文件中,然后批量执行的程序。它是Linux自动化运维的基础工具。
第一个Shell脚本
#!/bin/bash
# 这是一个注释
echo "Hello, World!"
执行脚本:
chmod +x script.sh
./script.sh
变量
定义和使用变量
# 定义变量(等号两边不能有空格)
name="DevOps"
version=1.0
# 使用变量(推荐使用${}格式)
echo "Welcome to ${name}"
echo "Version: ${version}"
# 只读变量
readonly PI=3.14159
# 删除变量
unset name
环境变量
# 查看环境变量
env
echo $PATH
echo $HOME
# 设置环境变量
export JAVA_HOME=/usr/local/java
export PATH=$PATH:$JAVA_HOME/bin
特殊变量
| 变量 | 说明 |
|---|---|
| $0 | 脚本文件名 |
| $1-$9 | 第1-9个参数 |
| $# | 参数个数 |
| $@ | 所有参数 |
| $? | 上一条命令的退出状态 |
| $$ | 当前脚本的进程ID |
条件判断
if语句
if [ condition ]; then
# 代码
elif [ condition ]; then
# 代码
else
# 代码
fi
条件表达式
# 字符串比较
[ "$str1" = "$str2" ] # 相等
[ "$str1" != "$str2" ] # 不相等
[ -z "$str" ] # 字符串为空
[ -n "$str" ] # 字符串不为空
# 数值比较
[ $a -eq $b ] # 等于
[ $a -ne $b ] # 不等于
[ $a -gt $b ] # 大于
[ $a -lt $b ] # 小于
# 文件测试
[ -f file ] # 文件存在
[ -d dir ] # 目录存在
[ -r file ] # 文件可读
[ -w file ] # 文件可写
[ -x file ] # 文件可执行
循环
for循环
# 遍历列表
for i in 1 2 3 4 5; do
echo "Number: $i"
done
# C风格for循环
for ((i=1; i<=10; i++)); do
echo "Count: $i"
done
# 遍历文件
for file in /var/log/*.log; do
echo "Processing: $file"
done
while循环
# 基本while循环
count=1
while [ $count -le 5 ]; do
echo "Count: $count"
((count++))
done
# 读取文件内容
while IFS= read -r line; do
echo "Line: $line"
done < file.txt
until循环
count=1
until [ $count -gt 5 ]; do
echo "Count: $count"
((count++))
done
函数
# 定义函数
function greet() {
local name=$1
echo "Hello, $name!"
}
# 调用函数
greet "DevOps"
# 返回值
add() {
local result=$(($1 + $2))
echo $result
}
sum=$(add 3 5)
echo "Sum: $sum"
实践:系统监控脚本
#!/bin/bash
echo "=== 系统信息 ==="
echo "主机名: $(hostname)"
echo "系统版本: $(cat /etc/os-release | grep PRETTY_NAME | cut -d'"' -f2)"
echo ""
echo "=== 资源使用 ==="
echo "CPU使用率: $(top -bn1 | grep "Cpu(s)" | awk '{print $2}')%"
echo "内存使用:"
free -h | grep Mem
echo ""
echo "磁盘使用:"
df -h | grep -E "^/dev/"
总结
Shell脚本是运维自动化的基础。掌握变量、条件判断、循环和函数,就能编写各种自动化脚本来提高工作效率。