Linux云计算 |【第二阶段】SHELL-DAY1

主要内容:

Shell概述,编写及执行脚本、Shell变量(自定义变量、环境变量、预定义变量、位置变量)、数值运算(expr工具、$[]、let、bc)

一、Shell概述

Shell 是操作系统提供的一种命令行解释器,它允许用户通过输入命令来与操作系统进行交互。Shell 提供了一个界面,用户可以通过这个界面执行各种系统命令、运行程序、管理文件和目录等。在Linux内核与用户之间的解释器程序,通常指:/bin/bash

负责向内核翻译及传达用户/程序指令,相当于操作系统的“外壳”

1)基本功能

  • 命令解释:Shell 负责解释用户输入的命令,并将其转换为操作系统可以执行的操作。
  • 脚本编写:Shell 支持编写脚本,用户可以将一系列命令组合成一个脚本文件,以便自动执行复杂的任务。
  • 环境管理:Shell 管理用户的环境变量,如 PATH、HOME 等,这些变量影响命令的查找和执行。
  • 管道和重定向:Shell 支持使用管道(|)将一个命令的输出作为另一个命令的输入,以及使用重定向(>、<、>>)将命令的输入输出重定向到文件。

2)常见的 Shell

  • Bash (Bourne Again SHell):Linux 和 macOS 默认的 Shell,是 Bourne Shell (sh) 的增强版本,支持命令补全、历史记录、脚本编程等功能。
  • Zsh (Z Shell):一个兼容 Bash 的 Shell,提供了更多的功能和自定义选项,如更好的命令补全、主题支持等。
  • Fish (Friendly Interactive Shell):一个用户友好的 Shell,提供了自动建议、语法高亮、Web 配置界面等功能。
  • PowerShell:微软开发的 Shell,主要用于 Windows 系统,支持命令行管理、自动化任务和脚本编写。

3)Shell的使用方式

  • 交互式(命令行):人工干预、智能化程度高;逐条解释执行、效率低;
  • 非交互式(脚本):需要提前设计、智能化难度大;批量执行、效率高、方便在后台运行;

4)常见的Shell程序种类

  • 通过usermod、chsh更改登录Shell;
  • 手动执行目标Shell程序;
[root@svr7 ~]# cat /etc/shells      //查看系统拥有的解释器
/bin/sh         //多数Unix默认的Shell
/bin/bash       //多数Linux默认使用的Shell
/sbin/nologin    //非登录Shell
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh

若需要临时使用另一种Shell环境,可以直接执行对应的Shell解释器程序

例如1:切换sh解释器

[root@svr7 ~]# sh       //切换sh解释器
sh-4.2#      //sh运行风格
sh-4.2# exit    //返回到切换前的bash环境

解释:用户 —> /bin/bash默认解释器—> sh解释器(用户登录后,默认使用bash解释器,切换sh解释器(子Shell),则默认bash解释器暂时放入后台等待子Shell解释器退出)

例如2:要执行ksh可以切换到ksh命令行环境

[root@svr7 ~]# yum -y install ksh      //安装ksh解释器
[root@svr7 ~]# cat /etc/shells
/bin/ksh    //确认当前系统已识别ksh
/bin/rksh
...
[root@svr7 ~]# ksh     //切换ksh解释器
#        //ksh运行风格
# ls
anaconda-ks.cfg       公共  视频  文档 音乐
initial-setup-ks.cfg  模板  图片  下载 桌面
# exit      //返回到切换前的bash环境

补充:ksh无法进行Tab补齐,不支持快捷键

5)环境配置

用户可以通过修改 Shell 的配置文件来自定义 Shell 的行为,常见的配置文件包括:

  • .bashrc:Bash 的交互式非登录 Shell 配置文件。
  • .bash_profile:Bash 的登录 Shell 配置文件。
  • .zshrc:Zsh 的配置文件。
  • config.fish:Fish 的配置文件。

通过这些配置文件,用户可以设置别名、环境变量、自定义提示符等。

二、Shell脚本介绍

提前写好可执行语句,能够完成特定任务的文件(顺序、批量化处理,解释型程序)

1、创建脚本思路

1)明确脚本目标

在开始编写脚本之前,首先要明确脚本的目标和功能。例如,你可能想要创建一个脚本来备份文件、监控系统状态、自动化日常任务等。

2)规划脚本结构

根据脚本的目标,规划脚本的结构和流程。考虑需要执行的步骤、可能的输入和输出、以及如何处理错误和异常情况。

3)选择合适的 Shell

根据你的需求和操作系统的不同,选择一个合适的 Shell。常见的选择包括 Bash、Zsh 和 Fish。大多数情况下,Bash 是一个通用且功能强大的选择。

4)编写脚本

① 脚本头部

每个 Shell 脚本都应该以一个“shebang”行开始*(Sha-Bang调用标记),指定要使用的 Shell 解释器。例如,使用 Bash 时,脚本的第一行应该是:

#!/bin/bash

② 添加注释

在脚本中添加注释,解释每个部分的功能。注释以 # 开头,例如:

# 这是一个备份脚本的示例

③ 定义变量

根据需要定义变量,存储文件路径、配置选项等。例如:

source_dir="/path/to/source"
backup_dir="/path/to/backup"

④ 编写主要逻辑

根据规划的结构,编写脚本的主要逻辑。使用条件判断、循环、函数等结构来实现所需的功能。例如,一个简单的备份脚本可能包含以下逻辑:

# 检查源目录是否存在
if [ ! -d "$source_dir" ]; then
  echo "源目录不存在: $source_dir"
  exit 1
fi

# 创建备份目录(如果不存在)
mkdir -p "$backup_dir"

# 执行备份
cp -r "$source_dir"/* "$backup_dir"

# 输出备份完成信息
echo "备份完成: $source_dir -> $backup_dir"

⑤ 处理错误和异常

在脚本中添加错误处理逻辑,确保在出现错误时能够及时通知用户并采取适当的措施。例如:

if [ $? -ne 0 ]; then
  echo "备份失败"
  exit 1
fi

5)添加执行权限,并测试脚本

编写完成后,测试脚本以确保其按预期工作。尝试不同的输入和场景,检查输出和错误处理是否正确。

[root@svr7 ~]# vim /root/first.sh    //创建脚本文件
echo 'Hello World!'    //写脚本语句
[root@svr7 ~]# chmod +x /root/first.sh   //加执行权限
[root@svr7 ~]# /root/first.sh      //运行脚本
Hello World!

6)优化和改进

根据测试结果,优化和改进脚本。考虑添加更多的功能、改进错误处理、提高脚本的效率和可读性。

7)文档和分享

为脚本编写文档,解释其功能、使用方法和注意事项。如果合适,可以将脚本分享给其他人使用。

2、规范的脚本构成

一个规范的 Shell 脚本不仅需要实现预期的功能,还应该具备良好的结构、注释和错误处理机制。

  1. Shebang 行:脚本的第一行应该是 Shebang 行,指定脚本解释器。
  2. 脚本描述:在 Shebang 行之后,添加一段简短的描述,说明脚本的用途和功能。
  3. 版权和版本信息:添加版权和版本信息,以便其他人了解脚本的来源和更新情况。
  4. 环境变量和全局变量:使用大写字母命名环境变量,小写字母命名全局变量,以示区分。
  5. 函数定义:将复杂的逻辑封装在函数中,提高代码的可读性和可维护性。
  6. 主要逻辑:调用之前定义的函数,并处理可能的输入和输出。
  7. 错误处理:在脚本中添加错误处理机制,确保在出现错误时能够及时通知用户并采取适当的措施。
  8. 清理和收尾:在脚本结束前,进行必要的清理工作,如删除临时文件、恢复环境变量等。
  9. 文档和注释:在脚本中添加详细的注释,解释每个部分的功能。

示例脚本:

#!/bin/bash
# 这是一个用于备份指定目录的脚本
# 作者: [你的名字]
# 版本: 1.0
# 最后更新日期: [日期]

# 环境变量
export TEMP_DIR="/tmp"

# 全局变量
source_dir="/path/to/source"
backup_dir="/path/to/backup"

# 检查目录是否存在的函数
# 参数: 目录路径
check_directory() {
  if [ ! -d "\$1" ]; then
    echo "目录不存在: \$1"
    exit 1
  fi
}

# 执行备份的函数
perform_backup() {
  cp -r "$source_dir"/* "$backup_dir"
  if [ $? -ne 0 ]; then
    echo "备份失败"
    exit 1
  fi
}

# 主要逻辑
check_directory "$source_dir"
check_directory "$backup_dir"
perform_backup
echo "备份完成: $source_dir -> $backup_dir"

# 清理临时文件
rm -rf "$TEMP_DIR/backup_tmp"

补充:脚本 &> /dev/null  程序后台运行并把输出丢入”黑洞”

3、脚本的执行方式

脚本的执行方式取决于操作系统和脚本文件的权限设置。

1)直接执行(标准规范方式)

  • 添加x权限,指定脚本文件的路径(绝对路径 / 相对路径)(脚本声明)

解释:用户 —> /bin/bash默认解释器 —> bash解释器(读取脚本声明)—> 执行脚本文件

[root@svr7 opt]# vim test01.sh
#!/bin/bash      //声明解释器
#A test program for Shell-Script     //声明注释
echo 'Hello World'     //执行脚本
[root@svr7 opt]# chmod +x /opt/test01.sh    //脚本添加执行权限
[root@svr7 opt]# /opt/test01.sh     //绝对路径方式运行
Hello World

常见报错:坏的解释器: 没有那个文件或目录

[root@svr7 opt]# vim /opt/test01.sh
#!/bin/baash    //脚本声明的错误解释器
...
[root@svr7 opt]# /opt/test01.sh
-bash: /opt/test01.sh: /bin/baash: 坏的解释器: 没有那个文件或目录

2)通过解释器执行

  • 格式:sh 脚本文件路径       //使用解释器执行脚本。无需x权限(
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小安运维日记

Hey~ 感谢您的充电支持!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值