Shell参考 - Linux Shell 训练营

devtools/2024/12/22 20:02:15/
出品方<Linux.cn & 阿里云开发者学堂>
一,Linux 可以划分为以下四个部分:
1. 应用软件
2. 窗口管理软件 Unity Gnome KDE
3. GNU 系统工具链 Software- GNU Project - Free Software Foundation
4. Linux 内核
二,什么是shell
1. Linux shell 是一种特殊的交互式工具,它提供了文件管理,运行进程的途径。
2. Shell 的核心是命令提示符,允许用户输入命令,然后解释命令,并在内核中执行。
3. 用户可以编写脚本文件,将多个 shell 命令以某种形式组织起来,作为程序一起执行。
三,默认的 Shell —— GNU Bash Shell
1. Shell 有很多种,不同的 shell 有不同的特性
2. 几乎所有的 Linux 发行版默认 shell 是 Bash shell
3. 有些发行版的默认系统 shell 和 默认交互 shell 并不相同
4. 查看系统支持的 shell 类型
bash: 一种对 bsh 在功能上进行扩展的 shell,几乎可以涵盖 shell 所需要的所有功能
ksh: 一种与 bsh 兼容的编程 shell,增加了很多特性,常见于 Unix 操作系统
tcsh: 一种具有 C 语言风格语法结构的 shell,常见于嵌入式开发(IC 公司)
zsh: 一种结合了 bash、ksh 和 tcsh 的特点,同时提供了高级编程特性的高级 shell
sh: 在绝大部分 Linux 发行版中,作为软链接指向其他 shell(默认是 bash )
shell 脚本 = shell 命令 + shell 特性 + 流程控制
四,Shell 的常用命令
# 管理文件和目录
touch cp mv rm file cat more less tail head cd pwd ls mkdir rmdir
# 管理系统进程
ps top kill killall
# 管理磁盘空间
mount umount df du
# 处理数据文件
sort grep gzip tar
#Shell 命令帮助手册
man [command]
五,Shell脚本中的变量
# 环境变量
set env
# 变量的定义/赋值
val=vaule
# 使用美元符 $ 对变量进行引用
echo ${name}
# 命令替换:将命令的输出赋值给变量
YYYYMMDD=$(date +%Y%m%d)
六,Shell脚本的条件控制
# if-then 语句
# if-then-else 语句
# if-then-elif-else 语句
if command
then
    commands
fi
条件测试
  • test 命令提供了在 if-then 语句中测试不同条件的途径。
  • 如果 test 命令中列出的条件成立,返回的退出状态码为 0,反之为 1。
  • test 命令的等价写法 [ ]
if [ ] ; then 
    commands
fi
提供的三类判断条件
  • 数值比较
  • 字符串比较
  • 文件比较
case 语句,常代替 if-then-elif 语句用于对某个变量有大量判断语句的场景。
七,shell 脚本中数组的使用
  • 一维数组
    • 数组定义、元素引用、数组长度、数组分片
  • 二维数组
    • Shell 只有一维数组的概念
    • 如何实现二维数组的需求
  • 关联数组(Bash从4.0版本才支持)
    • 字典的概念
    • 关联数组的定义与元素的访问
    • 遍历元素的 key 和 value
八,Shell 脚本的循环控制
# for 语句
# 第一种
for var in list
do
    commands
done
# 读取列表中的值
# 从命令读取值
# 用通配符遍历目录
# 第二种
for (( 变量赋值; 迭代条件; 迭代过程 ))
do
    commands
done
# while 语句
# until 语句
# 嵌套循环
# break 
# continue
九,Shell 脚本的参数
# 命令行参数
bash xxx.sh arg1 arg2
# 位置参数
$0 $1 ... $9 ${10}
# 若参数内容包含空格,则必须使用引号
bash xxx.sh "arg1 arg2"
# 特殊参数
$# $* $@
# 移除参数
shift
直接调用左移一个参数,以数字作为参数则指定左移的参数个数。
参数的几种常见形式
例:有一个 shell 脚本,用于处理一个文件中特定日期的数据,并将结果输出到另一个文件中。
我们需要有三个参数:输入文件路径、待处理数据的日期、输出文件路径
# 1. 参数个数明确、顺序固定
./handle_data.sh para1 para2 para3
# 2. 通过命令行选项传参(空格分隔),支持缺省参数
./handle_data.sh -input para1 -date para2 -output para3
10,Shell 脚本中的函数
函数的定义与使用
# 创建函数
function func_name { ... }
func_name() { ... }
# 使用函数
func_name
  • 函数中使用变量
    • 向函数传递参数
  • 位置参数变量
  • 在函数中处理变量
    • 全局变量
    • 局部变量 local
函数的返回值
# 获取函数的退出状态码
# 默认为函数最后执行的命令的退出状态码
$?
# 使用 return 命令
范围:整数 0-255
# 使用命令执行获取函数的输出
ans=$(func)
11,Shell 循环控制与参数处理
作业
194. 转置文件 - 力扣(LeetCode)
扩展
# 仿照以下脚本进行练习
tzselect
12,Shell 脚本编码规范
  • 脚本的命名与权限
    • 文件后缀、文件名可读性、可执行权限
  • 脚本的基本结构
    • Shebang、函数、注释
  • 脚本中变量与函数的命名与引用
    • 变量和函数命名格式
    • 引用方式
  • 脚本中的相对路径和绝对路径
    • 获取脚本执行路径的方法
  • 脚本中的日志输出规范
    • 函数封装、日志格式
13,Shell 脚本调试与排错
常见问题
1. 特殊字符问题
2. 环境变量问题
调试与排查
1. bash –n
读取但不执行命令
2. bash -x
显示bash执行过程
14,函数库
# 系统公共函数库文件,我在Ubuntu上没找到
/etc/init.d/function
# 调用系统公共函数库中的函数
. /etc/init.d/functions 
source /etc/init.d/functions
# 第三方公共函数库
Bash Shell Function Library
Bash Shell Function Library 是一个短小精炼的Bash 公共库,他提供了诸如数组操作、命令执行、文件管理、日志记录、信息提醒、网络检测、字符操作、时间操作、变量操作等功能,帮助运维工程师快速完成自己的脚本编写工作。
项目地址: 
GitHub - SkypLabs/bsfl: Bash Shell Function Library
GitHub - SkypLabs/bsfl: Bash Shell Function Library​
bsfl: Bash Shell Function Library 是一个短小精炼的 Bash 公共库,他提供了诸如数组操 作、命令执行、文件管理、日志记录、信息提醒、网络检测、字符操作、时间操作、变量 操作等功能,帮助运维工程师快速完成自己的脚本编写工作。在线文档:https://skyplabs.github.io/bsfl/modules.html
Bash Lib
Bash Lib 是一个原子化的公共库,你可以根据自己的实际需要,引入所需的公共库分组,使用相应的内容,降低整个项目的大小。Bash Lib 提供了诸多原子库,包括参数处理、日历处理、日期处理、Hash处理、帮助处理、列表处理、交互处理、文字处理、测试处理、时间处理等功能。
项目地址: Bash-lib by aks 


http://www.ppmy.cn/devtools/95962.html

相关文章

19. OTA功能 - 1

1. 概述 耳机采用AB分区的OTA方式,AB分区详见分区表,通过手机蓝牙下发更新文件。 OTA方案,目前主要依赖恒玄现有的方案。 参考:https://blog.csdn.net/zhanghuaishu0/article/details/117668173 2. APP下载 安卓直接应用宝搜Bestechnic 国外的google play搜Bestechnic…

高可用集群KEEPALIVED

一.高可用集群 1.1 集群类型 LB: 负载均衡HA: 高可用集群SPoF: 解决单点故障HPC: 高性能集群 1.2 系统可用性 AMTBF/(MTBFMTTR) 99.95%:(60*24*30)*(1-0.9995)21.6分钟 #一般按一个月停机时间统计 1.3 实现高可用 提升系统高可用的解决方案&#xff1a;降低平均故障时间…

Transformer架构;Encoder-Decoder;Padding Mask;Sequence Mask;

目录 Transformer架构 Transformer架构的主要组成部分: 简单举例说明输入和输出: Encoder-Decoder 编码器/解码器组成 6、位置前馈网络(Position-wise Feed-Forward Networks) 7、残差连接和层归一化 10、掩码Mask 10.1 Padding Mask 10.2 Sequence Mask 为什么…

【IDEA】idea配置服务器没有tomcat

IntelliJ IDEA 本身并不包含 Tomcat 服务器。 详细解释&#xff1a; IntelliJ IDEA 是一个集成开发环境 (IDE)&#xff0c;为软件开发提供各种工具和功能。它专注于代码编辑、调试、代码重构和版本控制等任务。Tomcat 是一个 Java Servlet 容器和 Web 服务器&#xff0c;用于…

gitlab实现CI/CD自动化部署

gitlab实现CI/CD自动化部署 项目根目录中新增gitlab-ci.yml在gitlab上查看gitlab-runner配置方法配置服务器环境推送代码&#xff0c;触发runner&#xff0c;实现自动构建和部署参考 gitlab支持通过配置CI/CD实现自动化部署我们的代码项目&#xff0c;主要核心就是配置gitlab-c…

Leetcode JAVA刷刷站(45)跳跃游戏 ||

一、题目概述 二、思路方向 为了解决这个问题&#xff0c;我们可以使用贪心算法。贪心算法在每一步都选择当前状态下的最优解&#xff0c;从而希望达到全局最优解。 在这个问题中&#xff0c;我们可以从数组的开头开始遍历&#xff0c;同时维护两个变量&#xff1a;steps 用来记…

react的setState中为什么不能用++?

背景&#xff1a; 在使用react的过程中产生了一些困惑&#xff0c;handleClick函数的功能是记录点击次数&#xff0c;handleClick函数被绑定到按钮中&#xff0c;每点击一次将通过this.state.counter将累计的点击次数显示在页面上 困惑&#xff1a; 为什么不能直接写prevStat…

qt生成一幅纯马赛克图像

由于项目需要&#xff0c;需生成一幅纯马赛克的图像作为背景&#xff0c;经过多次测试成功&#xff0c;记录下来。 方法一&#xff1a;未优化方法 1、代码&#xff1a; #include <QImage> #include <QDebug> #include <QElapsedTimer>QImage generateMosa…