【Linux】Shell编程从入门到实践

一、Shell脚本基础入门

1.1 第一个Shell脚本开发流程

#!/bin/bash  # 指定解释器路径
echo "Hello World"  # 输出字符串
  • 执行步骤
  1. 编写脚本:保存为echo.sh
  2. 赋予权限:chmod +x echo.sh
  3. 运行脚本:./echo.shsh echo.sh

1.2 echo命令高级用法

功能场景示例代码说明
普通输出echo "Hello Shell"直接输出字符串
换行输出echo -e "Line1\nLine2"-e开启转义,支持\n换行
命令结果输出echo $(date)输出命令执行结果(推荐写法)
颜色输出echo "\033[31m红色文本\033[0m"31=红色,0m恢复默认颜色
文件覆盖echo "内容" > file.txt覆盖写入文件
文件追加echo "内容" >> file.txt追加写入文件

二、变量与参数传递机制

2.1 变量操作核心语法

name="Alice"          # 定义字符串变量
age=18                # 定义数值变量
now=$(date +%F)       # 命令结果赋值(推荐写法)
echo "姓名:$name,年龄:$age,日期:$now"  # 变量引用
echo $?               # 查看上一条命令执行状态(0=成功)

2.2 参数传递与输入处理

#!/bin/bash
echo "脚本名:$0"        # 输出脚本名称
echo "参数个数:$#"      # 输出参数数量
echo "第一个参数:$1"    # 输出第一个参数
echo "所有参数:$*"      # 输出所有参数

# 键盘输入示例
read -p "请输入姓名:" user_name
echo "你好,$user_name!"

三、运算符与条件判断

3.1 算术运算符(整数运算)

运算符示例说明
+$((a+b))加法
-$((a-b))减法
*$((a*b))乘法
/$((a/b))除法(取整)
%$((a%b))取余

3.2 关系运算符(数值比较)

运算符说明示例
-eq等于[ $a -eq $b ]
-ne不等于[ $a -ne $b ]
-gt大于[ $a -gt $b ]
-lt小于[ $a -lt $b ]

条件判断示例

a=5; b=3
if [ $a -eq $b ]; then
    echo "相等"
else
    echo "不等"  # 输出结果:不等
fi

3.3 文件测试运算符

dir="/data/logs"
file="/etc/hosts"

if [ -d "$dir" ]; then    # 判断目录是否存在
    echo "目录存在"
fi

if [ -f "$file" ]; then   # 判断文件是否存在
    echo "文件存在"
fi

四、流程控制与循环结构

4.1 条件判断结构

if-else结构

score=85
if [ $score -ge 90 ]; then
    echo "优秀"
elif [ $score -ge 80 ]; then
    echo "良好"
else
    echo "及格"
fi

case结构

action="start"
case $action in
    "start")
        echo "启动服务"
        ;;
    "stop")
        echo "停止服务"
        ;;
    *)
        echo "未知操作"
        ;;
esac

4.2 循环结构

for循环(数值遍历)

# 遍历不连续数值
for i in 1 3 5 7; do
    echo $i
done

# 遍历连续数值(1-100)
for i in $(seq 100); do
    echo $i
done

while循环(文件内容处理)

while read line; do
    echo "行内容:$line"
done < file.txt  # 从文件读取内容逐行处理

五、函数与代码复用

5.1 函数定义与调用

# 带参数函数
function calculate() {
    local a=$1; local b=$2
    local sum=$((a+b))
    echo "和为:$sum"  # 通过echo返回结果
}

# 调用函数
result=$(calculate 5 3)
echo $result  # 输出:和为:8

5.2 函数返回值

function check_status() {
    if [ -f "data.txt" ]; then
        return 0  # 成功返回0
    else
        return 1  # 失败返回非0
    fi
}

check_status
echo "状态码:$?"  # 输出文件存在状态

六、输入输出重定向技术

类型示例命令说明
标准输入read var < input.txt从文件读取输入到变量
标准输出ls > output.log覆盖写入文件
追加输出echo "info" >> log.txt追加写入文件
错误输出command 2> error.log错误信息单独写入文件
混合输出command &> all.log所有输出写入同一文件
静默执行command >/dev/null 2>&1丢弃所有输出(黑洞机制)

七、Chat GPT辅助Shell脚本开发

7.1 智能生成脚本示例

需求:编写参数校验的算术运算脚本

#!/bin/bash
# 自动生成:Chat GPT
if [ $# -ne 2 ]; then
    echo "请提供两个数字参数" >&2
    exit 1
fi

if ! [[ $1 =~ ^[0-9]+$ && $2 =~ ^[0-9]+$ ]]; then
    echo "参数必须为整数" >&2
    exit 1
fi

echo "加法:$(( $1 + $2 ))"
echo "减法:$(( $1 - $2 ))"
echo "乘法:$(( $1 * $2 ))"
[ $2 -eq 0 ] && echo "除法:除数不能为0" || echo "除法:$(( $1 / $2 ))"

7.2 自动化运维脚本

需求:自动创建带时间戳的文件

#!/bin/bash
folder="backup"
[ ! -d "$folder" ] && mkdir "$folder"  # 目录不存在则创建

timestamp=$(date +%Y%m%d%H%M%S)
touch "$folder/file_$timestamp.txt"
echo "创建文件:$folder/file_$timestamp.txt"
Tags:

发表回复

Your email address will not be published. Required fields are marked *.

*
*