Shell参考 - Linux Shell 训练营

出品方<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 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/871113.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ArcGIS高/低聚类(Getis-Ord General G)——探究人口空间格局的20年变迁

先了解什么是莫兰指数高/低聚类莫兰指数&#xff1f; 高/低聚类 (Getis-Ord General G) 统计是一种用于检测空间数据中是否存在高值或低值聚类的统计方法&#xff0c;这种方法可以帮助我们理解数据点在空间上是否呈现某种聚集模式。 高/低聚类 (Getis-Ord General G) 和空间自…

centos系统配置转发和iptables使之成为网关

centos系统配置转发和iptables使之成为网关 在当下互联网环境中&#xff0c;有很多内网服务器不能出网&#xff0c;例如安装软件包&#xff0c;更新程序之类的&#xff0c;偶尔会需要出网&#xff0c;下面这种方式就是专门解决这个事情的。 如下配置在 centos 6 7 8 rocky 8 …

期权的集合竞价是什么?期权集合竞价时间分享

今天带你了解期权的集合竞价是什么&#xff1f;期权集合竞价时间分享。期权的集合竞价是指在交易日的特定时间段内&#xff0c;期权合约的买卖双方提交并匹配他们的买卖意愿&#xff0c;以确定期权的开盘价格。 期权的集合竞价是一种特定的交易机制&#xff0c;用于确定期权合…

位图与布隆过滤器 —— 海量数据处理

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;C从入门到精通 目录 &#x1f680; 位图 一&#xff1a; &#x1f525; 位图概念 二&#xff1a; &#x1f525; 位图的实现思路及代码实现三&#xff1a; &#x1f525; 位图的应用四&#xff1a;…

文书智能助手

背景 司法、医疗等行业存在着大量的文书&#xff0c;一份文书或者卷宗少则几十页&#xff0c;多则几万页。在查看和检查这些文书时&#xff0c;会遇到大量的信息。当需要查询进一步的详细内容时&#xff0c;往往需要选择一下文字&#xff0c;然后再在各种系统中 查询详细的信息…

IDEA安装和使用(配图)

功能强大&#xff1a; 1、强大的整合能力&#xff0c;比如Git,Maven,Spring等 2、开箱即用&#xff08;集成版本控制系统&#xff0c;多语言支持的框架随时可用&#xff09; 3、符合人体工程学 1、高度智能 2、提示功能的快速&#xff0c;便捷&#xff0c;范围广 3、好用…

Nginx平滑升级与回滚示例

Nginx 的平滑升级和平滑回滚是确保 Web 服务高可用性的重要组成部分。这两种操作允许你在不中断服务的情况下更新或回滚 Nginx 的版本。 Nginx 平滑升级与回滚 Nginx 的平滑升级和平滑回滚是确保 Web 服务高可用性的重要组成部分。这两种操作允许你在不中断服务的情况下更新或…

Vue 生命周期详解含demo、面试常问问题案例

Vue 生命周期详解、面试常问问题案例 含 demo 文章目录 Vue 生命周期详解、面试常问问题案例 含 demo一、Vue 生命周期是什么二、Vue 中如何使用生命周期钩子1. **beforeCreate**2. **created**3. **beforeMount**4. **mounted**5. **beforeUpdate**6. **updated**7. **beforeD…

AIoTedge边缘计算平台V1.0版本发布

AIoTedge边缘计算平台V1.0&#xff0c;一款创新的AIoT解决方案&#xff0c;现已正式发布。该产品集成了NodeRED软网关、边缘物联网平台和边缘AI能力&#xff0c;为企业提供强大的边云协同能力。它支持设备管理和泛协议接入&#xff0c;确保不同设备间的无缝连接。AIoTedgeV1.0还…

Hexo通过GitHub设置自定义域名

本身GitHub也是支持自定义域名的&#xff0c;本次教程将讲解如何使用GitHub自带的自定义域名解析。 1. GitHub设置 1.1 登录GitHub账号 登录GitHub账号&#xff0c;找到名称为 用户名.github.io的仓库&#xff0c;并点击进入。 1.2 进入Settings页面 点击如图的Settings按…

https://developer.nvidia.com/cuda-toolkit-archive

CUDA Toolkit Archive | NVIDIA Developerhttps://developer.nvidia.com/cuda-toolkit-archive

一款免费的文件锁定占用解除工具,绿色免安装版

IObit Unlocker是一款由IObit公司开发的免费文件解锁工具&#xff0c;旨在解决用户在删除、重命名、移动或复制文件和文件夹时遇到的“无法删除”或“访问被拒绝”的问题。该软件体积小巧&#xff0c;不到3MB&#xff0c;非常易于使用&#xff0c;并且不需要安装&#xff0c;可…

代码随想录 day 49 单调栈

第十章 单调栈part02 42. 接雨水 接雨水这道题目是 面试中特别高频的一道题&#xff0c;也是单调栈 应用的题目&#xff0c;大家好好做做。 建议是掌握 双指针 和单调栈&#xff0c;因为在面试中 写出单调栈可能 有点难度&#xff0c;但双指针思路更直接一些。 在时间紧张的情…

volta引发的血案

什么是volta volta用于做项目级别的node版本控制&#xff0c;当手头上的项目有多个时&#xff0c;且node版本可能还不一样&#xff0c;我们需要不断切换node版本。使用volta可以很好的解决这个问题。只需要安装volta&#xff0c;然后在下面的package.json中配置好node版本即可…

初始redis:List

列表 List 相当于数组或者顺序表。 对于List来说&#xff0c;两侧都可以插入和删除&#xff0c;时间复杂度是O(1)。 有很多的操作&#xff0c;比如 llen 可以获取List的长度&#xff0c;lrem 可以删除元素 &#xff0c;lrange可以去一个字符串 &#xff0c; lindex可以根据下标…

P38-数据存储1

百度2015年系统工程师笔试题 编程题 编程题 编程题 编程题

JUC- Synchronized原理

对象头概念 以 32 位虚拟机为例 Klass Word&#xff1a;指向类对象的指针&#xff0c;标明这个对象的类型 普通对象 |--------------------------------------------------------------| | Object Header (64 bits) | |---------------…

BI分析实操案例分享:零售企业如何利用BI工具对销售数据进行分析?

在当下这个竞争激烈的零售市场&#xff0c;企业如何在波诡云谲的商场中站稳脚跟&#xff0c;实现销售目标的翻倍增长&#xff1f; 答案可能就藏在那些看似杂乱无章的数字里。 是的&#xff0c;你没有看错&#xff0c;答案正是那些我们日常接触的销售数据。它们就像是宝藏&…

设计模式(单例模式、工厂模式、建造者模式、代理模式)

设计模式是前辈们对代码开发经验的总结&#xff0c;是解决特定问题的一系列套路。它不是语法规定&#xff0c;而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案&#xff08;设计思想、设计经验&#xff09;。 一、六大原则 1、单一职责原则&#…

C语言--01基础数据类型

1.整型 概念&#xff1a;表达整数类型的数据语法&#xff1a; int a 123; // 定义了一个专门用来存储整数的变量a a 456 ; 需要注意的地方&#xff1a; int 的本意是 integer&#xff0c;即整数的意思int a 代表在内存中开辟一块小区域&#xff0c;称为 a&#xff0c;用来…