面向程序员的Linux Shell脚本编程深度指南

本文介绍了Shell作为命令解释器的作用,涵盖了基础操作、文件管理、脚本编写、条件控制、函数定义、应用场景(如自动化任务、系统维护和数据处理)、可执行文件和PATH环境变量,以及内置和外部命令的区别,以及获取帮助的方法。
摘要由CSDN通过智能技术生成

Shell

Shell 可以看作是一个命令解释器,为我们提供了交互式的文本控制台界面。我们可以通过终端控制台来输入命令,由shell进行解释并最终交给内核执行。

Shell教程基础

1. 基础操作与命令

  • 文件和目录操作

    • 创建目录:mkdir directory_name

    • 更改工作目录:cd path/to/directory

    • 列出目录内容:ls

    • 删除空目录:rmdir directory_name

    • 删除文件或目录(递归删除):rm -rf file_or_directory

  • 执行命令与输出重定向

    • 执行命令:如 echo "Hello, World!" 输出文本

    • 管道符(|):将一个命令的输出作为另一个命令的输入,如 ls -l | grep ".txt" 查找所有.txt文件

    • 输出重定向:command > output_file 将命令输出写入文件;command >> output_file 追加输出到文件

  • 变量与字符串操作

    • 定义变量:var="value"

    • 使用变量:${var}

    • 字符串连接:echo "${var} is my variable"

2. Shell脚本编写

  • 创建脚本:在文本编辑器中创建一个.sh文件,例如 script.sh,并在开头添加执行权限声明 #!/bin/bash

  • 脚本示例:

 #!/bin/bash
 # 创建目录
 mkdir /usr/directory
 cd /usr/directory || exit 1
 # 创建子目录
 mkdir code util test
  • 条件判断与流程控制

    • if 条件语句:

       if [ condition ]; then
           commands
       fi
    • case 语句用于多分支选择:

       case $variable in
           pattern1)
               commands;;
           pattern2)
               commands;;
           *)
               default_commands;;
       esac
  • 循环结构

    • for 循环:

       for var in item1 item2 item3; do
           echo "$var"
       done
    • while 循环:

       while [ condition ]; do
           commands
       done

3. 函数定义与调用

  • 定义函数:

     function my_function() {
         # 函数体
     }
  • 调用函数:

     my_function arg1 arg2

使用场景

场景一:自动化任务

  • 自动备份特定目录下的文件。

  • 每天定时检查服务器状态并发送报告邮件。

场景二:系统管理

  • 在多个服务器上批量安装软件或更新配置。

  • 清理临时文件、日志滚动、资源监控等维护任务。

场景三:数据处理

  • 处理大批量的日志文件,从中提取有用信息。

  • 对数据库查询结果进行格式化输出或进一步分析。

场景四:构建工具

  • 编写自动化构建脚本,如编译源代码、运行测试套件、打包部署等。

场景五:批处理作业

  • 批量转换文件格式,如图片转换、文本编码转换等。

可执行文件

在Unix/Linux系统中,如果一个文件具有可执行权限,并且位于系统的PATH环境变量所包含的路径下,那么这个文件就可以作为命令来直接运行。当你在终端输入该文件名并按回车时,Shell会查找PATH中的目录找到该文件并执行它。

例如,假设你有一个名为mycommand的可执行文件,存放在 /usr/local/bin 目录下(而此目录通常包含在PATH环境变量中),你可以像运行内置或外部命令一样,在终端直接输入 mycommand 来执行它。

要使一个文件成为可执行文件,你需要给它添加执行权限,可以使用 chmod 命令:

 chmod +x /path/to/mycommand

然后,无需指定完整路径,只需输入文件名即可运行它:

 mycommand

这种机制使得用户可以根据需要编写自己的程序或脚本,并将其设置为可执行文件,从而扩展系统的功能。

其中有哪些目录包含在PATH中?

在Unix/Linux系统中,PATH 是一个环境变量,它定义了一个目录列表,当你在命令行输入一个命令时,Shell会按照这个列表中的顺序依次查找该命令对应的可执行文件。

PATH 环境变量的内容是一系列路径名,用冒号(:)分隔。例如:

 echo $PATH

输出可能是这样的:

 

 /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

这里 /usr 目录并不是 PATH 的一部分,而是 PATH 中包含的一些路径下的子目录。比如 /usr/bin/usr/sbin 这两个目录通常包含在 PATH 里,它们用于存放系统级的用户和管理员可执行程序。

以下是在Linux系统中常见的放置可执行文件的目录:

  1. /bin: 存放对所有用户都重要的、基本的可执行文件,这些程序是启动系统和运行shell所必需的。

  2. /sbin: 同样包含重要系统程序,但主要是面向系统管理员的工具,如启动脚本、服务管理命令等。

  3. /usr/bin: 放置大部分用户使用的可执行文件,包括各种应用软件的命令行工具。

  4. /usr/local/bin: 用户自行安装或编译的软件通常被放在这一目录下,这里的程序对所有用户可用。

  5. /usr/sbin: 类似于 /sbin,但是针对的是非核心的系统级别的管理命令。

  6. /usr/local/sbin: 同样为本地安装的系统管理命令,但使用频率相对较低或仅限超级用户使用。

当需要运行一个命令时,Shell会首先检查当前工作目录(.),然后按照 PATH 环境变量列出的目录顺序搜索指定的可执行文件。如果找到多个同名的可执行文件,那么最先出现在 PATH 路径中的那个将被执行。

内置命令(Built-in Commands): 内置命令是Shell程序本身的一部分,它们不需要外部程序或文件来执行。当你在Shell中输入一个内置命令时,Shell直接在其内部处理这个命令,无需创建新的进程。内置命令通常用于管理Shell自身的环境和功能,例如:

  • cd 改变当前工作目录

  • echo 输出文本到终端

  • export 设置或显示环境变量

  • history 显示命令历史记录

  • exit 退出当前Shell

外部命令(External Commands): 外部命令则是指独立于Shell程序之外的、存储在磁盘上的可执行文件。当在Shell中输入一个外部命令时,Shell需要查找该命令对应的文件(通常是通过PATH环境变量指定的路径列表进行搜索),然后创建一个新的子进程来执行这个文件。外部命令可以完成各种系统级别的操作,例如:

  • ls 列出目录内容

  • mkdir 创建新目录

  • grep 在文件中搜索匹配模式

  • cat 查看或合并文件内容

总结起来,Shell就像是一个控制台工具箱,内置命令相当于工具箱内自带的小工具,可以直接使用;而外部命令则是工具箱外额外挂载的各种专业工具,需要从磁盘加载后才能使用。通过Shell,用户能够方便地管理和操控整个操作系统。

常用快捷键

快捷键功能
ctrl + c停止进行
ctrl + l清屏,等同于 clear(往上翻能看到记录);彻底清屏:reset
tab提示(防止敲错,高效)
上下键查看执行过的命令

帮助命令

manhelp--help 是在Unix/Linux系统中用于获取命令或程序帮助信息的不同方法,它们的区别如下:

  1. man (manual)

    • 功能man 命令是用来查看系统手册页(Manual Pages)的工具,手册页包含了几乎所有Linux命令、系统调用、库函数、设备文件等详细说明和使用方法。

    • 范围man 提供的信息通常更为详尽且结构化,它会显示多章节的手册内容,每个命令可能有多个部分(例如,1表示用户命令,2表示系统调用,3表示库函数等)。

    • 示例man ls 会打开ls命令的手册页。

  2. help

    • 功能:对于Bash Shell或其他shell内置命令,可以使用 help 来获取简要的帮助信息。这主要用于Shell本身的内部命令。

    • 范围help 的适用范围限于当前Shell环境下的内置命令,不适用于外部命令或系统级别的命令。

    • 示例help cd 会显示关于cd内置命令的简单帮助信息。

  3. --help

    • 功能:许多GNU工具及现代软件遵循的一个约定是提供一个 --help 参数选项,通过运行命令加上 --help 可以直接从命令行获得该命令的基本使用方法和参数选项列表。

    • 范围--help 主要针对的是具体的可执行程序,尤其是GNU项目以及其他遵循这一规范的程序,无论它们是否是shell内置命令还是外部命令。

    • 示例ls --help 或者 gcc --help 将分别显示ls命令和gcc编译器的简洁帮助信息。

总结来说,如果你想要详细了解一个命令的所有细节和选项,首选 man;如果你只需要查看shell内置命令的基本帮助,使用 help;而如果一个命令提供了 --help 选项,则可以通过该命令直接获取快速参考指南。

  • 21
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值