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

Shell脚本以及Shell脚本的基础语法就是什么

Shell脚本以及Shell脚本的基础语法就是什么

在 Linux/Unix 系统中,Shell 不仅是用户与操作系统交互的命令行界面,更是一种强大的脚本编程语言。本文将带你理解什么是Shell脚本以及Shell脚本的基础语法。


目录

1. Shell 简介

1.1 什么是 Shell?

1.2 Shell 环境

1.3 第一个 Shell 脚本

1.4 Shell 脚本运行方法

方法一:赋予执行权限后直接运行

方法二:通过解释器显式调用

2. 基础语法

2.1 变量

2.2 传递参数

2.3 字符串

字符串操作:

2.4 数组

2.5 运算符

算术运算(整数)

比较运算(条件判断)

2.6 echo 命令

2.7 printf 命令

2.8 read 命令

2.9 test 命令

两种写法等价:

常见测试类型:

示例:安全删除文件

总结:Shell 脚本核心要点速查



1. Shell 简介

1.1 什么是 Shell?

Shell 是操作系统的命令解释器(Command Interpreter),它接收用户输入的命令,将其翻译为内核能理解的指令,并返回执行结果。

  • 广义 Shell:指所有命令行界面(如 Bash、Zsh、Fish)
  • 狭义 Shell:特指 Bourne Again Shell(Bash) —— Linux 默认 Shell

常见 Shell 类型:

  • sh(Bourne Shell):原始 Unix Shell
  • bash(Bourne Again Shell):Linux 主流,兼容 sh
  • zsh:功能增强版,macOS 默认(自 Catalina 起)
  • csh/tcsh:C 语言风格语法(较少用于脚本)

1.2 Shell 环境

在 Linux 终端中,可通过以下命令查看当前 Shell:

echo $SHELL      # 查看默认 Shell 路径(如 /bin/bash)
ps -p $$         # 查看当前进程的 Shell 类型

示例:


1.3 第一个 Shell 脚本

创建一个名为 hello.sh 的文件:

1.输入命令符创建文件

2.进入文件按下i进行编辑:

echo与后面要打印的文本之间必须为一个空格,否则会发生格式错误无法运行该shell文件。

3.按下ESC并输入:wq,按下回车键进行保存并退出

4.更改该文件的权限使其允许被运行(关于修改文件权限的方法可以看上篇文件管理的文章)

5.输入./hello.sh运行该文件

关键点:

  • #!/bin/bash: 指定脚本解释器
  • # 开头的行为注释
  • $(...) 用于执行命令并获取输出

1.4 Shell 脚本运行方法

方法一:赋予执行权限后直接运行
chmod +x hello.sh    # 添加可执行权限
./hello.sh           # 在当前目录运行
方法二:通过解释器显式调用
bash hello.sh        # 使用 bash 解释器运行
sh hello.sh          # 使用 sh 解释器运行

2. 基础语法

2.1 变量

Shell 变量无需声明类型,命名规则:

  • 由字母、数字、下划线组成(不能以数字开头
  • 区分大小写
  • 赋值时 = 两边不能有空格
name="Alice"
age=25
PI=3.14159
# 使用变量:$var 或 ${var}
echo "姓名: $name, 年龄: ${age}岁"

运行结果:

特殊变量:

  • $0:脚本名称
  • $1, $2...:位置参数
  • $#:参数个数
  • $$:当前进程 PID

2.2 传递参数

运行脚本时可传入参数:

./script.sh arg1 arg2 arg3

在脚本中访问:

echo "脚本名: $0"
echo "第一个参数: $1"
echo "参数总数: $#"
echo "所有参数: $*"

2.3 字符串

Shell 支持单引号 ' ' 和双引号 " "

引号类型变量替换转义字符
单引号 ' '❌ 不支持❌ 原样输出
双引号 " "✅ 支持✅ 支持 \n\$ 等
name="Bob"
echo 'Hello $name'   # 输出:Hello $name
echo "Hello $name"   # 输出:Hello Bob

⚠️注意

  • 单引号中可包含双引号,双引号中可包含单引号;
  • 但单引号中不可包含单引号,双引号中不可包含双引号。
字符串操作:

示例代码:

#!/bin/bash
aaa=https://www.baidu.com
echo ${aaa:1:4}
echo ${aaa:1}
echo ${aaa:0-3:3}
echo ${aaa:0-3}
echo ${aaa#*.}
echo ${aaa##*.}
echo ${aaa%:*}
echo ${aaa%%.*}

运行结果:


2.4 数组

Bash 支持一维数组(索引从 0 开始):

代码实例:

#!/bin/bash
arr=(1 2 3 456 "apple" "banana")
echo "${arr[*]}"
echo "${#arr[@]}"
echo "${#arr[5]}"
echo "${!arr[@]}"
echo "${arr[@]:1:3}"
echo "${arr[@]/*[0-9]/}"
echo "${arr[@]//a/b}"

运行结果:

⚠️ 注意:数组赋值时不能有等号两侧空格


2.5 运算符

算术运算(整数)
a=10
b=3
echo $((a + b))    # 13
echo $((a * b))    # 30
echo $((a % b))    # 1
比较运算(条件判断)
运算符说明示例
-eq等于[ $a -eq $b ]
-ne不等于[ $a -ne $b ]
-gt大于[ $a -gt $b ]
-lt小于[ $a -lt $b ]
-ge大于等于[ $a -ge $b ]
-le小于等于[ $a -le $b ]
==字符串相等[ "$str1" == "$str2" ]

实例:

#!/bin/bash
a=10
b=5
if [ $a -eq $b ]; thenecho "两个数相等"
elseecho "两个数不相等"
fi
运行结果:
两个数相等


2.6 echo 命令

最常用的输出命令:

echo "普通输出"
echo -e "支持\n转义\t字符"  # -e 启用转义
echo -n "不换行输出"         # -n 禁用末尾换行

2.7 printf 命令

格式化输出(类似 C 语言):

name="Tom"
age=30
printf "姓名: %s, 年龄: %d\n" "$name" "$age"
# 输出:姓名: Tom, 年龄: 30

⚠️注意:参数与参数之间以空格为间隔而不是以逗号为空格


2.8 read 命令

从标准输入读取用户输入:

echo "请输入你的名字:"
read name
echo "你好, $name!"
# 静默输入(如密码)
read -s password
echo "密码已输入(不可见)"

运行结果:


2.9 test 命令

用于条件测试,常与 if 结合使用。

两种写法等价:
test expression
[ expression ]   # 注意:[ 后和 ] 前必须有空格!
常见测试类型:
# 文件测试
[ -f "file.txt" ]   # 是否为普通文件
[ -d "/home" ]      # 是否为目录
# 字符串测试
[ -z "$str" ]       # 字符串是否为空
[ "$a" == "$b" ]    # 字符串是否相等
# 数值测试
[ $a -gt $b ]       # a > b
示例:安全删除文件
if [ -f "temp.log" ]; thenrm temp.logecho "日志已清理"
fi

总结:Shell 脚本核心要点速查

主题关键语法
变量name="value",使用 $name
参数$1$2$#$*
字符串双引号支持变量,单引号原样输出
数组arr=(a b c)${arr[@]}
运算$((a + b))[ $a -gt $b ]
输入/输出readechoprintf
条件测试test 或 [ ]

下一篇预告:shell脚本编码的流程控制(if...else,for,while,until循环...)和函数的定义与应用

http://www.jsqmd.com/news/395068/

相关文章:

  • 详细介绍:[特殊字符]BZOJ 离线刷题神级工具!免联网 + 浏览器即开 + 题解代码全,效率直接翻倍!
  • Vue.js 循环语句
  • CVE-2011-1669
  • AngularJS 表达式
  • 【rust-i18n】简介
  • 2026 人工智能与大数据专业毕业论文选题方向及题目示例(nlp/自然语言处理/图像处理)​完整教程:从入门到实战部署
  • PHP Mail:全面解析邮件发送与接收
  • 毕业论文AI辅助工具选哪个?6款热门推荐解析
  • 小白程序员轻松上手OpenClaw+DeepSeek+Slack打造全天候智能办公助手
  • 小白程序员必备:3分钟搞懂AI Agent,开启智能助理学习之旅
  • 2026年论文语法润色AI选型指南:精准修正学术表达与多模型输出对比的核心逻辑 - 小白条111
  • 大数据领域 OLAP 的实时数据监控系统设计
  • 6大AI写作平台测评,毕业论文创作效率翻倍
  • P4577 [FJOI2018] 领导集团问题
  • 基于springboot的留学信息推荐系统的设计与实现_41yux160
  • 主题019:并行计算与GPU加速
  • 题020:机器学习势函数
  • 2026年论文AI率降低工具选型指南:多模型对比视角下的高效避重解决方案 - 小白条111
  • 【计算机网络】ep2:数据链路层概述
  • C# 判断语句详解与应用
  • 一场春晚三次亮相!魔法原子机器人已经Next Level
  • 题018:量子力学与分子力学耦合(QM/MM)
  • 2026年论文AI润色工具选型指南:多模型对比视角下的专业度与效率决策框架 - 小白条111
  • JavaScript 简介
  • 2024年,提示工程架构师必须掌握的Agentic AI广告工具
  • 主题017:粗粒化分子动力学
  • AIGC 与 AI 配音,引领语音技术新方向
  • 2026年国内硕博论文中文润色AI工具选型指南:多模型对比下的学术性提升解决方案 - 小白条111
  • 主题016:反应路径与过渡态理论
  • AI应用架构师亲测:智能运维平台解决运维成本高的3个有效方案