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

shell语言核心语法

我来为您详细介绍Shell的核心语法。

1. 变量操作

  1. 变量定义和赋值
# 基本赋值
name="张三"
age=25# 只读变量
readonly PI=3.14159# 删除变量
unset name# 变量引用
echo $name
echo ${name}  # 推荐方式,可以避免歧义
  1. 特殊变量
$0    # 脚本名称
$1    # 第一个参数
$#    # 参数个数
$*    # 所有参数
$@    # 所有参数(推荐使用,可以正确处理参数中的空格)
$?    # 上一个命令的退出状态
$$    # 当前进程ID

2. 字符串操作

  1. 字符串长度
str="Hello World"
echo ${#str}  # 输出:11
  1. 字符串截取
str="Hello World"
echo ${str:0:5}    # 输出:Hello
echo ${str:6:5}    # 输出:World
  1. 字符串替换
str="hello hello hello"
echo ${str/hello/hi}      # 替换第一个hello
echo ${str//hello/hi}     # 替换所有hello

3. 数组操作

  1. 数组定义和访问
# 定义数组
fruits=("苹果" "香蕉" "橙子")# 访问元素
echo ${fruits[0]}    # 输出:苹果
echo ${fruits[@]}    # 输出所有元素
echo ${#fruits[@]}   # 输出数组长度
  1. 数组操作
# 添加元素
fruits+=("葡萄")# 删除元素
unset fruits[1]# 遍历数组
for fruit in "${fruits[@]}"; doecho $fruit
done

4. 条件判断

  1. if语句
# 基本语法
if [ condition ]; thencommands
elif [ condition ]; thencommands
elsecommands
fi# 示例
if [ $age -gt 18 ]; thenecho "成年人"
elif [ $age -eq 18 ]; thenecho "刚成年"
elseecho "未成年人"
fi
  1. 条件测试
# 文件测试
[ -f file.txt ]    # 文件是否存在
[ -d dir ]         # 目录是否存在
[ -r file.txt ]    # 文件是否可读
[ -w file.txt ]    # 文件是否可写
[ -x file.txt ]    # 文件是否可执行# 字符串比较
[ -z "$str" ]      # 字符串是否为空
[ -n "$str" ]      # 字符串是否非空
[ "$str1" = "$str2" ]  # 字符串相等
[ "$str1" != "$str2" ] # 字符串不相等# 数值比较
[ $num1 -eq $num2 ]  # 相等
[ $num1 -ne $num2 ]  # 不相等
[ $num1 -gt $num2 ]  # 大于
[ $num1 -lt $num2 ]  # 小于
[ $num1 -ge $num2 ]  # 大于等于
[ $num1 -le $num2 ]  # 小于等于

5. 循环结构

  1. for循环
# 基本for循环
for i in {1..5}; doecho $i
done# C风格for循环
for ((i=1; i<=5; i++)); doecho $i
done# 遍历目录
for file in *.txt; doecho $file
done
  1. while循环
# 基本while循环
count=0
while [ $count -lt 5 ]; doecho $count((count++))
done# 读取文件
while read line; doecho $line
done < file.txt
  1. until循环
# 直到条件为真
count=0
until [ $count -eq 5 ]; doecho $count((count++))
done

6. 函数定义和使用

# 函数定义
function hello() {echo "Hello, $1!"return 0
}# 函数调用
hello "张三"# 获取返回值
hello "李四"
echo $?  # 输出返回值

7. 命令替换和管道

  1. 命令替换
# 使用反引号
result=`ls -l`# 使用$()
result=$(ls -l)
  1. 管道操作
# 基本管道
ls | grep "test"# 组合多个命令
find . -name "*.txt" | xargs grep "hello"

8. 错误处理

# 设置错误时退出
set -e# 捕获错误
trap 'echo "错误发生"; exit 1' ERR# 自定义错误处理
function error_handler() {echo "错误发生在第 $1 行"exit 1
}
trap 'error_handler ${LINENO}' ERR

9. 调试技巧

# 开启调试模式
set -x# 显示执行的命令
set -v# 检查语法
bash -n script.sh# 调试特定行
bash -x script.sh

10. 实用技巧

  1. 参数解析
while [[ $# -gt 0 ]]; docase $1 in-e|--env)ENV="$2"shift 2;;-p|--port)PORT="$2"shift 2;;*)echo "未知参数: $1"exit 1;;esac
done
  1. 日志函数
function log() {echo "[$(date +'%Y-%m-%d %H:%M:%S')] $1"
}log "开始执行..."
log "执行完成"

这些是Shell脚本中最核心和常用的语法。掌握这些语法,您就能够编写出功能强大的Shell脚本。建议在实际应用中多加练习,逐步掌握这些语法特性。

http://www.xdnf.cn/news/156241.html

相关文章:

  • RabbitMQ全栈实践手册:从零搭建消息中间件到SpringAMQP高阶玩法
  • 数据结构和算法(九)--红黑树
  • C++?类和对象(下)!!!
  • 精益数据分析(27/126):剖析用户价值与商业模式拼图
  • 观察者模式 (Observer Pattern)
  • 游戏引擎学习第246天:将 Worker 上下文移到主线程创建
  • 如何给GitHub项目提PR(踩坑记录
  • windows下查看idea运行的进程占的JVM情况工具
  • olama部署deepseek模型
  • 从后端研发角度出发,使用k8s部署业务系统
  • gradle-缓存、依赖、初始化脚本、仓库配置目录详解
  • SpringBoot实现的后端开发
  • Ubuntu20.04 Ollama 配置相关
  • c++初始化数组
  • C语言中位段的应用
  • 【教程】Docker运行gitlab容器
  • 数据结构和算法(八)--2-3查找树
  • 什么时候使用Python 虚拟环境(venv)而不用conda
  • Qt软件开发-摄像头检测使用软件V1.1
  • python 与Redis操作整理
  • 血泪之arduino库文件找不到ArduinoJSON.h: No such file or directory错误原因
  • 学习记录:DAY18
  • AI日报 - 2025年04月26日
  • Yocto项目实战教程-第8章-树莓派启动定制镜像-8.4小节-使用Wic工具创建分区镜像
  • 毕业项目-基于java的入侵检测与防御系统
  • 字节 AI 原生 IDE Trae 发布 v1.3.0,新增 MCP 支持
  • 使用MyBatis注解方式的完整示例,涵盖CRUD、动态SQL、分页、事务管理等场景,并附详细注释和对比表格
  • Java爬虫入门:从网页抓取到数据提取(正则表达式篇)
  • 单例设计模式之懒汉式以及线程安全问题
  • 【计算机视觉】CV项目实战- 深度解析TorchVision_Maskrcnn:基于PyTorch的实例分割实战指南