当前位置: 首页 > news >正文

Shell脚本入门:从基础到实战

一、脚本基础结构

一个完整的 Shell 脚本包含 “解释器声明” 和 “执行命令” 两部分,部分场景会加注释说明。

1. 脚本开头(必须)

首行需声明使用的 Shell 解释器,最常用的是 Bash,格式为:

#!/bin/bash  # 声明此脚本用 Bash 解释执行,#! 称为“shebang”
  • 若不声明,系统会用默认 Shell(通常是 Bash),但为了兼容性和明确性,建议必写。
2. 注释(可选但推荐)

用 # 开头标识注释内容,解释器会忽略注释,仅用于给人看。

#!/bin/bash
# 这是一个注释,用于说明脚本功能:批量创建 3 个文件夹
mkdir dir1 dir2 dir3  # 这是行内注释,说明当前命令的作用
3. 脚本执行方式

写好的脚本(如 test.sh)需先赋予执行权限,再运行:

# 1. 赋予执行权限(仅需执行一次)
chmod +x test.sh
# 2. 执行脚本(两种方式)
./test.sh  # 相对路径执行(推荐,明确执行当前目录的脚本)
bash test.sh  # 直接用 Bash 解释执行(无需提前赋权)

二、核心基础语法

1. 变量(存储数据)

Shell 变量无需声明类型,直接赋值使用,核心规则:

  • 赋值时 等号前后不能有空格(如 name="zhangsan" 正确,name = "zhangsan" 错误)。
  • 使用变量时加 $ 符号,如 echo $name 或 echo ${name}(大括号可选,复杂场景需加,避免歧义)。

示例:

#!/bin/bash
# 1. 定义变量
name="Alice"  # 字符串变量(引号可加可不加,含空格必须加)
age=25        # 数字变量(无需加引号)
# 2. 使用变量
echo "姓名:$name"
echo "年龄:${age}岁"  # 大括号明确变量边界,避免和后面的“岁”混淆
# 3. 接收用户输入(read 命令)
read -p "请输入你的城市:" city  # -p 选项:显示提示语,输入内容存入 city 变量
echo "你所在的城市:$city"
2. 输出内容(echo/printf)
  • echo:最常用,直接输出内容,默认换行。
    echo "Hello Shell"  # 输出:Hello Shell(换行)
    echo -n "不换行输出"  # -n 选项:不自动换行
    
  • printf:类似 C 语言的 printf,格式更严谨,需手动加换行符 \n
    printf "姓名:%s,年龄:%d\n" $name $age  # %s 对应字符串,%d 对应数字
    
3. 条件判断(if/else)

用于根据条件执行不同命令,核心是 [ 条件表达式 ](括号前后必须有空格),常见判断场景:

  • 数字比较:-eq(等于)、-gt(大于)、-lt(小于)(如 [ $age -gt 18 ] 表示年龄大于 18)。
  • 字符串比较:==(等于)、!=(不等于)(如 [ $name == "Alice" ])。
  • 文件判断:-f(是否为文件)、-d(是否为文件夹)(如 [ -d "dir1" ] 表示判断 dir1 是否存在且是文件夹)。

示例(判断年龄是否成年):

#!/bin/bash
read -p "请输入年龄:" age
if [ $age -ge 18 ]; then  # -ge 表示“大于等于”echo "已成年"
elseecho "未成年"
fi  # if 语句必须以 fi 结尾(反向拼写)
4. 循环(for/while)

用于重复执行命令,常见两种循环:

  • for 循环:适合固定次数的循环(如遍历列表、文件)。
    # 遍历数字 1-5,创建 5 个文件
    for i in {1..5}; do  # {1..5} 表示 1 到 5 的序列touch file$i.txt  # 创建文件 file1.txt 到 file5.txt
    done  # for 循环以 done 结尾
    
  • while 循环:适合按条件重复(如持续等待用户输入,直到输入正确)。
    # 循环接收输入,直到输入“exit”退出
    while true; do  # true 表示无限循环read -p "输入内容(输入 exit 退出):" inputif [ $input == "exit" ]; thenbreak  # 退出循环fiecho "你输入的是:$input"
    done
    
5. 函数(封装重复逻辑)

将多次使用的命令组合成函数,避免代码重复,格式:

#!/bin/bash
# 定义函数(函数名后无括号)
say_hello() {local name=$1  # local 表示变量仅在函数内有效,$1 表示函数的第一个参数echo "Hello, $name!"
}
# 调用函数(传参数)
say_hello "Bob"  # 输出:Hello, Bob!
say_hello "Charlie"  # 输出:Hello, Charlie!
  • 函数参数通过 $1(第一个参数)、$2(第二个参数)... 获取,类似脚本的命令行参数。

三、基础语法总结(新手必记)

  1. 脚本首行 #!/bin/bash 必须写,执行前用 chmod +x 赋权。
  2. 变量赋值无空格,使用加 $,接收输入用 read -p
  3. 条件判断用 [ 条件 ](空格必加),if 结尾用 fi
  4. 循环用 for/while,结尾用 done,遍历序列用 {1..n}
  5. 函数定义 函数名() { 命令 },参数用 $1/$2 获取。
http://www.dtcms.com/a/504270.html

相关文章:

  • 【Linux】深入理解线程同步与互斥
  • 山东青岛网站建设公司排名网站空白页黑链
  • C++学习之变量、常量、关键字、标识符命名规则、数据类型
  • BMS电池管理系统学习笔记_SOC算法
  • 浅谈信创数据库改造重难点
  • 建设银行唐山分行网站上海专业网站建设服务
  • 算法沉淀第七天(AtCoder Beginner Contest 428 和 小训练赛)
  • 温州做网站定制车载互联系统网站建设
  • 迅当网络深圳外贸网站建设竞价网络推广
  • 【GESP】C++四级真题 luogu-B4006 [GESP202406 四级] 宝箱
  • 公司做网站找谁公司做网站找谁网站信息评估抽查
  • wordpress网站添加密码访问营销微网站建设公司
  • 吴恩达新课程:Agentic AI(笔记2)
  • 用dw怎么做网站留言板重庆重庆网站建设
  • 家具网站开发目的wordpress页脚太高
  • 西南交通建设集团股份有限公司网站带分期功能的网站建设
  • 姚期智京都奖( 2021)演讲:做研究最好的方法是提出深刻、大胆和关键性的问题
  • 商务网站创建经费预算wordpress打开文章响应慢
  • arthas简介
  • 企业网站源码交易国产wordpress主题
  • 做网站要学什么c语言西安网站建设求职简历
  • 用阿里云服务器做自己购物网站wordpress多人聊天室
  • sm2025 模拟赛16 (2025.10.11)
  • 国内网站建设流程淘宝店标logo在线制作免费
  • 长沙市做网站公司排名广州做网站好的公司
  • SQL Server数据查询语句
  • 给领导发网站建设可行性方案邮件怎么写wordpress 获取用户邮箱
  • SQL NULL 函数详解
  • Linux进程信号(壹)_产生信号
  • 关于茶文化网站建设的背景做全屏的网站 一屛多高