【Shell编程-1】Shell的历史发展与基础命令、变量、常量

1. Shell 的历史和发展

1.1 什么是 Shell

Shell 是一种命令行界面(CLI),用来与操作系统交互,它提供了一种与计算机系统进行通信的方式。Shell 是操作系统的命令解释器,负责接收用户输入的命令并将其传递给操作系统内核执行。它的主要作用是通过命令行控制操作系统和应用程序。

Shell 最早起源于 Unix 系统,它为用户提供了一个便捷的接口,使用户能够执行各种操作,如文件管理、程序执行、系统监控等。随着时间的推移,Shell 发展出了不同的版本,最常见的 Shell 有以下几种:

  • Bash(Bourne Again Shell):是最常用的 Shell,尤其是在 Linux 和 macOS 系统中。它继承了 Bourne Shell 的基本功能,并加入了许多增强的特性,如命令补全、历史记录、脚本编程等。
  • Zsh(Z Shell):是一个功能强大的 Shell,提供了更加丰富的自动补全和提示功能。Zsh 支持多种插件和主题,是开发者中非常流行的选择。
  • Fish(Friendly Interactive Shell):以用户友好和可交互性为特点,具有自动提示、语法高亮等功能,非常适合新手使用。

每种 Shell 都有其独特的特点和优势,但它们的基本功能类似,都用于处理命令、执行脚本和管理系统。


1.2 Unix Shell 的起源

Shell 是一种命令行界面程序,它充当用户与操作系统之间的桥梁。Shell 允许用户输入命令并通过操作系统进行处理,通常也作为脚本执行环境。最早的 Shell 出现在 1960 年代,与 Unix 操作系统的诞生密切相关。

  • 初期的 Shell:Shell 的概念最早出现在 1970 年代初期的 Unix 操作系统中,由 Ken ThompsonBrian Kernighan 设计。最初的 Shell 是 Thompson Shell,它的功能相对简单,主要用于用户与系统交互。

  • Bourne Shell(sh):1977年,Stephen Bourne 创建了 Bourne Shell(通常称为 sh)。Bourne Shell 是 Unix 系统中最基础、最常见的 Shell 之一,也是 Unix Shell 的重要奠基石。它提供了更丰富的功能,比如脚本执行、输入输出重定向等,成为后续 Shell 的基础。

  • C Shell(csh):C Shell 由 Bill Joy 在 1978 年设计,它与 Bourne Shell 相比,提供了更多的交互功能,例如历史记录和命令别名等。尽管 C Shell 在一些方面改进了用户体验,但其脚本语法并不如 Bourne Shell 简单易懂。

  • Korn Shell(ksh):1980年代,David Korn 开发了 Korn Shell,它综合了 Bourne Shell 和 C Shell 的优点,增加了许多新的特性,例如数组和内建数学运算。Korn Shell 是 Unix 环境中另一个重要的脚本语言。

  • Z Shell(zsh):Z Shell 是由 Paul Falstad 在 1990 年代初期创建的,它的设计目标是结合 C Shell 和 Korn Shell 的优点,并进一步改进 Shell 的交互性。它支持自动补全、拼写纠错和扩展的脚本功能,使其成为一个功能非常强大的 Shell。

1.3 为什么学习 Bash 是一个很好的起点?

虽然有多种 Shell 可供选择,但 Bash 依然是最流行且最重要的 Shell,对于学习和实践 Shell 脚本有着不可替代的优势:

  • 广泛使用:Bash 是 Linux 系统中最常见的 Shell,也是 macOS 默认的 Shell。很多服务器、云平台和操作系统都将 Bash 作为默认的 Shell。

  • 兼容性强:Bash 与其他 Unix Shell(如 sh、ksh)保持较高的兼容性,即我们写的 Bash 脚本在大多数 Unix 系统上都能运行。

  • 丰富的社区资源:作为最流行的 Shell,Bash 拥有庞大的社区和丰富的文档支持。

  • 功能强大:Bash 支持强大的脚本功能和许多扩展,例如命令行补全、历史记录、条件判断、循环结构、文件操作等。

  • 可拓展性和自定义:Bash 提供了丰富的配置选项和插件系统,允许用户根据自己的需求进行个性化定制。

1.4 基础 Shell 命令

Shell 提供了许多用于管理文件、进程、用户和系统的命令。下面会列举一些常见的 Shell 命令:

  • ls:列出当前目录中的文件和目录。常用选项包括 -l(长格式显示)、-a(显示隐藏文件)和 -h(以可读的格式显示文件大小)。

    ls -lah
    
  • cd:改变当前工作目录。常用于导航文件系统。

    cd /path/to/directory
    
  • cp:复制文件或目录。常用选项包括 -r(递归复制目录)和 -i(覆盖前提示)。

    cp source_file destination_file
    
  • mv:移动文件或重命名文件。

    mv oldname newname
    
  • rm:删除文件或目录。常用选项包括 -r(递归删除目录)和 -f(强制删除)。

    rm -rf /path/to/directory
    
  • echo:输出文本到控制台,常用于打印信息或调试。

    echo "Hello, World!"
    
  • cat:查看文件内容,支持文件拼接。

    cat filename
    
  • grep:查找文件中匹配的文本。常用于从文件中提取特定的行或内容。

    grep "pattern" filename
    
  • find:在文件系统中查找文件或目录。支持多种条件和操作。

    find /path/to/search -name "*.txt"
    
  • chmod:改变文件或目录的权限。常用于设置文件的读、写、执行权限。

    chmod 755 filename
    
  • ps:查看当前运行的进程。常用于系统监控和进程管理。

    ps aux
    

2. Shell 变量 与 常量

2.1 定义变量

Shell 编程中,变量是用来存储值的标识符。它可以在脚本执行期间被引用和修改。变量分为 本地变量环境变量,它们在作用范围和用途上有所不同。

  • 本地变量:仅在当前 Shell 会话中有效,定义后不会影响其他会话或子进程。
  • 环境变量:可以在当前会话以及子进程中共享,通常用于存储系统配置和程序运行所需的信息。

定义本地变量

定义本地变量时,直接使用赋值语句即可,变量名不允许有空格,通常使用字母、数字和下划线(_)组成。

# 定义变量
name="Alice"
age=25

# 引用变量
echo "Name: $name, Age: $age"

注意:

  • 变量名和等号之间不能有空格。
  • 引用变量时需要在变量名前加 $ 符号,例如 $name
  • 如果变量值包含空格或特殊字符,需要用双引号 "" 包裹。

定义环境变量

要将变量导出为环境变量,可以使用 export 命令。

export PATH="/usr/local/bin:$PATH"

这里的 PATH 是一个环境变量,用于存储系统查找可执行程序的路径。


变量替换

变量替换是 Shell 编程中用于动态获取或计算变量值的技术。以下是几种常用的变量替换方法:

  • 基本替换:直接使用 $var${var} 获取变量的值。

    name="Alice"
    echo $name      # 输出:Alice
    echo ${name}    # 输出:Alice
    
  • 命令替换:使用 $( ) 或反引号 ` ` 执行命令并获取其结果。

    current_date=$(date)       # 使用 $( )
    echo "Today is $current_date"
    
    current_date=`date`        # 使用反引号
    echo "Today is $current_date"
    
  • 算术替换:使用 $(( )) 进行整数运算。

    a=5
    b=10
    result=$((a + b))          # 计算 5 + 10
    echo "Result: $result"     # 输出:15
    
  • 默认值替换:为变量设置默认值,当变量未定义或为空时使用。

    echo ${name:-"Unknown"}    # 如果 name 未定义,输出 Unknown
    

2.2 常量

**Shell 中的常量是指不能被修改的变量。**可以通过 readonly 命令将变量设置为只读,或者直接定义为环境变量。

使用 readonly 定义只读变量

readonly PI=3.14
echo $PI                  # 输出:3.14

PI=3.14159                # 尝试修改,报错:PI: readonly variable

使用 export 定义环境变量

export HOME_PATH="/home/user"
echo $HOME_PATH           # 输出:/home/user

预定义环境变量

Shell 提供了一些常见的预定义环境变量,用于获取系统和会话信息,例如:

  • HOME:当前用户的主目录。
  • PATH:系统查找可执行程序的路径。
  • USER:当前登录的用户名。
  • PWD:当前工作目录。
echo $HOME                # 输出用户主目录路径
echo $PATH                # 输出系统的 PATH 环境变量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值