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

Shell基础

Shell 是一种命令行解释器,用于与操作系统内核进行交互。它允许用户通过输入命令来执行各种操作,如文件管理、进程控制、系统管理等。Shell 脚本是由一系列 Shell 命令组成的文本文件,可以自动化执行任务。以下是 Shell 语法的核心内容:


1. Shell 脚本的基本结构

一个典型的 Shell 脚本包括以下部分:

  • Shebang:指定脚本使用的 Shell 解释器。
  • 注释:以 # 开头的行是注释。
  • 命令:要执行的 Shell 命令。
#!/bin/bash
# 这是一个简单的 Shell 脚本
echo "Hello, World!"

2. 变量

  • 定义变量:变量名=值(注意:等号两边不能有空格)。
  • 使用变量:用 $ 引用变量。
name="John"
echo "Hello, $name"
  • 环境变量:系统预定义的变量,如 $HOME$PATH
  • 只读变量:使用 readonly 定义只读变量。
readonly PI=3.14

3. 字符串

  • 单引号:原样输出字符串,不解析变量。
  • 双引号:解析变量和转义字符。
name="John"
echo 'Hello, $name'  # 输出:Hello, $name
echo "Hello, $name"  # 输出:Hello, John
  • 字符串操作
    • 获取长度:${#string}
    • 截取子串:${string:start:length}
str="Hello, World"
echo ${#str}         # 输出:12
echo ${str:0:5}      # 输出:Hello

4. 数组

  • 定义数组:用括号括起来,元素之间用空格分隔。
  • 访问数组:用 ${array[index]}
fruits=("Apple" "Banana" "Cherry")
echo ${fruits[0]}    # 输出:Apple
echo ${fruits[@]}    # 输出所有元素
echo ${#fruits[@]}   # 输出数组长度

5. 条件判断

  • if 语句
    • 语法:if [ condition ]; then ... fi
    • 条件表达式:
      • 字符串比较:=, !=
      • 数字比较:-eq, -ne, -gt, -lt
      • 文件测试:-e(存在)、-d(目录)、-f(文件)
if [ "$name" = "John" ]; then
    echo "Hello, John"
elif [ "$name" = "Jane" ]; then
    echo "Hello, Jane"
else
    echo "Hello, Stranger"
fi
  • case 语句
    • 语法:case ... in ... esac
case "$fruit" in
    "Apple")
        echo "It's an apple."
        ;;
    "Banana")
        echo "It's a banana."
        ;;
    *)
        echo "Unknown fruit."
        ;;
esac

6. 循环

  • for 循环
    • 语法:for var in list; do ... done
for fruit in "Apple" "Banana" "Cherry"; do
    echo "$fruit"
done
  • while 循环
    • 语法:while [ condition ]; do ... done
count=1
while [ $count -le 5 ]; do
    echo "Count: $count"
    count=$((count + 1))
done
  • until 循环
    • 语法:until [ condition ]; do ... done
count=1
until [ $count -gt 5 ]; do
    echo "Count: $count"
    count=$((count + 1))
done

7. 函数

  • 定义函数function_name() { ... }
  • 调用函数:直接写函数名。
greet() {
    echo "Hello, $1"
}
greet "John"  # 输出:Hello, John
  • 返回值:使用 return 返回整数值,或通过 echo 返回字符串。
add() {
    return $(($1 + $2))
}
add 3 5
echo "Sum: $?"  # 输出:Sum: 8

8. 输入输出

  • 读取输入:使用 read 命令。
echo "Enter your name:"
read name
echo "Hello, $name"
  • 输出重定向
    • >:覆盖文件。
    • >>:追加到文件。
    • 2>:重定向错误输出。
echo "Hello" > output.txt
echo "World" >> output.txt
ls non_existent_file 2> error.log

9. 特殊变量

  • $0:脚本名称。
  • $1, $2, …:脚本参数。
  • $#:参数个数。
  • $@:所有参数。
  • $?:上一条命令的退出状态。
  • $$:当前脚本的进程 ID。
echo "Script: $0"
echo "First argument: $1"
echo "Number of arguments: $#"
echo "All arguments: $@"

10. 文件操作

  • 判断文件是否存在
    if [ -e "file.txt" ]; then
        echo "File exists"
    fi
    
  • 读取文件内容
    while read line; do
        echo "$line"
    done < file.txt
    

11. 调试 Shell 脚本

  • 使用 -x 选项运行脚本,打印每条命令及其结果。
    bash -x script.sh
    
  • 在脚本中启用调试:
    set -x  # 开启调试
    set +x  # 关闭调试
    

12. 常用命令

  • 文件操作
    • ls:列出目录内容。
    • cp:复制文件。
    • mv:移动文件。
    • rm:删除文件。
    • mkdir:创建目录。
  • 文本处理
    • cat:显示文件内容。
    • grep:搜索文本。
    • sed:流编辑器。
    • awk:文本处理工具。
  • 系统管理
    • ps:查看进程。
    • kill:终止进程。
    • top:实时系统监控。

总结

Shell 语法是 Linux/Unix 系统管理和自动化任务的基础。通过掌握变量、条件判断、循环、函数、文件操作等核心语法,你可以编写高效的 Shell 脚本来完成各种任务。

相关文章:

  • 2011-2019年各省人口数数据
  • vue3动态引入图片
  • 前端依赖nrm镜像管理工具
  • 软考程序员考试内容和备考策略
  • 补充:文件上传、下载传输给前端之直接传递图片二进制数据:网络中的图片、音频、视频等非字符数据的传输
  • 港科大提出开放全曲音乐生成基础模型YuE:可将歌词转换成完整歌曲
  • 每日Attention学习24——Strip Convolution Block
  • 嵌入式开发工程师笔试面试指南-Linux系统移植
  • 计算机组成与接口10
  • 深入探索C语言中的sscanf和sprintf函数
  • 【C++笔记】C++11智能指针的使用及其原理
  • 2025年SCI1区TOP:真菌生长优化算法FGO,深度解析+性能实测
  • java23种设计模式-观察者模式
  • Spring MVC框架六:Ajax技术
  • 用 DeepSeek 打样!KubeSphere LuBan 用 3 天/3 分钟“干掉”大模型部署焦虑
  • 第五六七章
  • Element Plus: el-card的内容滚动问题
  • ES 客户端 API 二次封装思想
  • C++大整数类的设计与实现
  • 点云配准技术的演进与前沿探索:从传统算法到深度学习融合(2)
  • 世界黄金协会:一季度全球黄金投资需求同比增170%
  • 狄威已任国铁集团副总经理
  • 广东省副省长刘红兵跨省调任湖南省委常委、宣传部长
  • 工业富联一季度净利增长25%,云计算业务营收增长超50%
  • 浦发银行一季度净利175.98亿增1.02%,不良率微降
  • “光荣之城”2025上海红色文化季启动,红色主题市集亮相