Shell参考 - Linux Shell 训练营

news2024/12/26 9:26:36
出品方<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.coloradmin.cn/o/2049334.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一款免费开源电脑流量监控软件,电脑流量统计工具!

TrafficMonitor是一个开源的网络速度监控工具&#xff0c;它能够在Windows平台上以悬浮窗的形式显示当前的网速、CPU和内存使用情况。该工具支持多种显示模式&#xff0c;包括悬浮窗和任务栏显示&#xff0c;并且允许用户更换不同的皮肤来自定义外观样式。此外&#xff0c;Traf…

【MySQL】数据库基础(库的操作)

目录 一、MySQL安装、连接、修改密码操作 二、库的操作 2.1 创建数据库 2.2 字符集和校验规则 2.3 操控数据库 2.4 修改数据库 2.5 删除数据库 2.6 数据库的备份和恢复 2.7 查看连接情况 前情提要&#xff1a; 我的服务器操作系统是Ubuntu20.04&#xff0c;安装的是M…

eNSP 华为远程访问路由器

华为远程访问路由器 前提&#xff1a;主机能与路由器通信就行&#xff0c;如果不同网段就配路由协议&#xff0c;这里直接模拟直连通信 Cloud&#xff1a; R&#xff1a; <Huawei>sys [Huawei]sys R [R]int g0/0/0 [R-GigabitEthernet0/0/0] [R-GigabitEthernet0/0/0]i…

Vue50 todolist自定义事件版本

代码 MyFooter.vue <template><div class"todo-footer" v-show"total"><label><!-- <input type"checkbox" :checked"isAll" change"checkAll"/> --><input type"checkbox" v…

【html】颜色随机产生器(补充包)

上一篇文章我们讲了如何制作一个通过滑动产色纯色背景的网页&#xff0c;今天&#xff0c;我们对那个网页进行一个补充&#xff0c;&#xff08;&#xff09; 因为很多人在设计网页的时候没有颜色的灵感这个时候我们我们就可以考虑通过随机产生一种颜色并且能够实时看到效果的…

Delphi5实现密码、姓名生成器

文章目录 目的效果图密码生成器类类定义成员函数 点击“密码生成”事件名字生成器类类的成员功能概述注意点 点击“姓名生成”事件点击“清空”事件“导出txt”事件“备注”输入框画图软件完整代码 目的 写这个程序的目的是生成一个密码和用于快递的名字&#xff08;生成密码和…

keepalived详细讲解

keepalived&#xff1a; Keepalived是一个基于VRRP&#xff08;‌Virtual Router Redundancy Protocol&#xff0c;‌虚拟路由冗余协议&#xff09;‌协议实现的LVS&#xff08;‌Linux Virtual Server&#xff09;‌服务高可用方案。‌它的主要作用是进行虚拟路由的故障切换&…

算法打卡 Day24(二叉树)-二叉搜索树的最近公共祖先 + 二叉搜索树中的插入操作 + 删除二叉搜索树中的节点

文章目录 Leetcode 235-二叉搜索树的最近公共祖先题目描述解题思路 Leetcode 701-二叉搜索树中的插入操作题目描述解题思路 Leetcode 450-删除二叉搜索树中的节点题目描述解题思路 Leetcode 235-二叉搜索树的最近公共祖先 题目描述 https://leetcode.cn/problems/lowest-comm…

江协科技STM32学习笔记(第10章 SPI通信)

第10章 SPI通信 10.1 SPI通信协议 10.1.1 SPI通信 SPI&#xff08;Serial Peripheral Interface&#xff09;是由Motorola公司开发的一种通用数据总线&#xff1b; 串行外设接口&#xff1b; I2C无论是软件还是软件电路&#xff0c;设计的都还是比较复杂的&#xff0c;硬件…

xss靶场详解

目录 1.第一题 2.第二题 3.第三题 4.第四题 5.第五题 6.第六题 7.第七题 8.第八题 1.第一题 在源码script标签里边&#xff0c;innerhtml是用于访问或修改 HTML 元素内的 HTML 内容的&#xff0c;这里是访问spaghet这个元素的&#xff0c;并通过括号里面的东西搜索当前…

【问题解决3】【已解决】Cannot determine path to‘tools.jar‘libraryfor17

前几天在IDEA运行JAVA项目时&#xff0c;出现这个报错。 这是因为是这个笔记本上安装的IDEA版本是“IntelliJ IDEA 2020.3.1”&#xff0c;与JDK17版本不兼容&#xff0c;这种情况下要想使得IDEA版本与JDK版本兼容&#xff0c;就需要升级IDEA版本或者使用JDK较低版本&#xff…

专题---自底向上的计算机网络(计算机网络相关概述)

目录 计算机网络相关概述 物理层 数据链路层 网络层 运输层 应用层 网络安全 1.计算机网络相关概述&#xff08;具体细节http://t.csdnimg.cn/NITAW&#xff09; 什么是计算机网络&#xff1f; 计算机网络是将一个分散的&#xff0c;具有独立功能的计算机系统&#x…

FusionSphere虚拟机网络不通

虚拟机侧 1、通过控制台Console或者VNC登录虚拟机。 获取VNC的token链接&#xff0c;因为token有超时失效&#xff0c;该链接获取后长时间不用要重新获取。 # nova get-vnc-console vmid novnc 2、登录VNC控制台之后&#xff0c;检查网卡和IP地址是否up, ARP学习是否正常…

Postman 问题汇总

1 postman Error: SSL Error: UNABLE_TO_VERIFY_LEAF_SIGNATURE 根因 SSL校验失败&#xff0c;可以在postman设置中关闭ssl校验&#xff0c;自测对ssl无要求。 解决方法 在postman设置中关闭ssl校验&#xff1a;

树莓派智能语音助手之聊天机器人-RASA

我的树莓派目前已经会“说”&#xff08;《树莓派智能语音助手之TTS - pyttsx3 espeak》&#xff09;&#xff0c;也能“听”&#xff08;《树莓派智能语音助手之ASR2 – sherpa-ncnn》&#xff09;了。接下来&#xff0c;就要让它能够和我们对话起来&#xff0c;即会“聊天”…

python 获取pdf文件中的超链接

pip install pymupdf pip install fitzimport fitz # PyMuPDFdef get_pdf_links(pdf_path):# 打开PDF文件document fitz.open(pdf_path)links []for page_num in range(len(document)):page document[page_num]# 获取当前页面的链接for link in page.get_links():links.app…

Mac升级系统文件都丢了怎么办?Mac更新后资料找不到了怎么恢复

Mac电脑由于其卓越的性能&#xff0c;受到了众多电脑用户的青睐。为了让用户获得更好的使用体验&#xff0c;Mac系统会定期推出新版本&#xff0c;来弥补前一个版本的不足。然而有用户反馈&#xff0c;Mac升级后&#xff0c;电脑里的部分资料消失了。mac升级会丢失文件吗?mac升…

iOS ColleCtionView 如何让cell 不重复创建并且只在展示的时候才创建

前言 使用 collectionView 一屏只展示一个 cell &#xff0c;一次只加载当前 cell&#xff0c;还要能够缓存已加载过的 cell &#xff0c;使 cell 不重复加载&#xff0c;听着好像就是将 collectionView 的复用机制禁用掉。用collectionView 实现这个需求&#xff0c;就出现了…

【GD32】从零开始学GD32单片机 | PMU电源管理单元+深度睡眠和待机例程(GD32F470ZGT6)

1. 简介 PMU电源管理单元通俗讲就是用来管理MCU的电源域的&#xff0c;它主要有两个功能——电压监测和低功耗管理。在GD32中一共有3个电源域——VDD/VDDA域、1.2V域和备份域。 VDD/VDDA域主要供PMU控制器、ADC、DAC等外设使用&#xff1b;1.2V域就是大部分外设都会使用的电源域…

ai大模型之争-生成音乐-豆包

豆包网页版&#xff1a;豆包 可以生成自定义音乐了 1&#xff0c;打开网页&#xff0c;登录 2&#xff0c;选择音乐生成 3&#xff0c;进行音乐配置 3.1&#xff0c;可以选择&#xff1a; 1&#xff0c;自己写歌词或者ai创造歌词&#xff1b; 2&#xff0c;可以选输入歌词…