什么是Shell?怎么编写和执行Shell脚本?

news2024/9/9 5:34:49

大家好呀!今天来简单介绍一下Shell基础,Shell介于内核与用户之间,是一个命令解释器,负责命令的解释。简单理解,Shell既是一个程序也是一种脚本语言。

1、shell介绍

1.1 概述

shell介于内核与用户之间,是一个命令解释器,负责命令的解释。shell是人机交互的桥梁,通过在终端上输入shell命令来控制linux内核,进而控制系统硬件。

9d58d9bff9d4efe808eefff219adae5d.jpeg

1.2 shell的种类

cat /etc/shells

7ca9c8312eb86163be91e6cc1b3241a8.png

终端输入ps命令,可以看到bash的进程。当用户在终端上输入命令后,会由该bash进行解析,所以解析命令的是bash,而不是终端(终端只是一个程序,而真正解析的是bash)

69ad217e9d3104be4f63029c2deb80b0.png

终端可以看做是bash的接口,而bash就是shell的一种类型(bash shell)

2、shell脚本

2.1 概述

1)什么是shell脚本?

简单理解,将需要执行的命令保存到文本中,按照顺序执行。由于shell是解释型的,所以无需编译。

概括而言,若干命令 + 脚本的基本格式 + 脚本特定语法 + 思想= shell脚本

2)什么时候用到脚本?

对于重复化、复杂化的工作,通过把工作的命令写成脚本,后续只需要执行脚本就能完成这些工作。

常见应用场景如自动化分析处理、自动化备份、自动化批量部署安装等等...

3)学习shell的一些建议

对于初学者,学习shell时建议:多看、多练、多思考。尽可能记忆更多的命令,掌握脚本的标准的格式(如指定魔法字符、使用标准的执行方式运行脚本)。当然,学习shell还有一个非常重要的一点:必须熟悉并掌握脚本的基本语法

2.2 脚本编写与执行

1)脚本基本写法

脚本第一行

#!/bin/bash

#!(魔法字符),指定脚本代码执行的程序。即它告诉系统这个脚本需要什么解释器来执行,也就是使用哪一种Shell

对脚本基本信息的描述(注释)

# Name: 名字
# Desc: 描述describe
# Path: 存放路径
# Usage: 用法
# Update: 更新时间

养成写注释的好习惯,方便以后忘记命令的功能后及时查阅。

描述完成后,下面就是脚本的具体内容

commands
...

eg:在/(根目录)下创建一个目录shell01,按照上述写法在该目录下编写一个shell1.sh脚本。

52b0e6f28fb8eb75a81dc9a4ae9a3461.png

8496310403e73cf024cb980ec2656918.png

编写完成后,保存退出。

命令按顺序依次执行,同一行编写多条命令,使用 ; 分隔

2)脚本执行方法:

标准脚本执行方法(建议):(魔法字符指定的程序会生效)

标准执行方式:绝对路径执行、相对路径执行。

标准执行方式要求:脚本必须要有可执行权限。

使用chmod +x增加权限

b0470a050c1d95dc65ec5de7781faca5.png

总结(标准执行方法):

①相对路径:./shell1.sh

②绝对路径:/shell01/shell1.sh

非标准的执行方法(不建议):(魔法字符指定的程序不会运作)

该方式下脚本不需要有可执行权限。

# 直接使用bash命令
bash shell1.sh
# -x:查看执行过程,用于排错
bash -x shell1.sh
# -n:查看脚本的语法是否有问题
bash -n shell1.sh

总结:

-x:  一般用于排错,查看脚本的执行过程;

-n:  用来查看脚本的语法是否有问题

cfb07e6e160873688f69f99bc0e11889.png

注:若脚本没有可执行权限,则不能使用标准的执行方法执行,此时可以使用非标准方法,如 bash shell1.sh

其他非标准方式:

# 使用source
source shell1.sh
# 使用 .
. shell1.sh

注:source 和 . 表示读取文件,执行文件里的命令

总结(非标准执行方法):①bashsource.

3、bash基本特性

3.1 命令和文件自动补全

使用Tab补全命令和文件

3.2 常见快捷键

常见的快捷键总结如下,以下的 ^表示 ctrl

^c   			终止前台运行的程序
^z	  			将前台运行的程序挂起到后台
^d   			退出 等价exit
^l   			清屏 
^a |home  	光标移到命令行的最前端
^e |end  	光标移到命令行的后端
^u   			删除光标前所有字符
^k   			删除光标后所有字符
^r	 			搜索历史命令

3.3 常用通配符(重点)

常用通配符总结如下

*:	匹配0或多个任意字符
?:	匹配任意单个字符
[list]:	匹配[list]中的任意单个字符
[!list]: 匹配除list中的任意单个字符
{string1,string2,...}:匹配string1,string2或更多字符串

eg:在/tmp目录下创建如下文件并测试

# 创建文件
touch file{1..3}
touch file{1..3}.jpg
# 以file开头的文件
ls file*
# 以jpg结尾的文件
ls *.jpg
# 以file开头,且后一位为任意单个字符的文件
ll file?
# 以file开头、后一位为任意单个字符且以.jpg结尾的文件
ll file?.jpg
# 匹配file1、file2、file3
ll file[123].jpg
# 匹配file1、file3
ll file[0-13].jpg
# 匹配file1、file2、file3
ll file{1..3}.jpg

7ecd29380b5cf50f5558e3b6ca7eb40d.png

c6ee0b80ab01bfaecf0b31b28fde9f13.png

3.4 bash中的引号(重点)

1)双引号"" :会把引号的内容当成整体来看待,允许通过$符号引用其他变量值

2)单引号'':会把引号的内容当成整体来看待,禁止引用其他变量值,shell中特殊符号都被视为普通字符 

3)反撇号``反撇号和$()一样,引号或括号里的命令会优先执行,如果存在嵌套,使用$(),反撇号不能用

echo $(echo "`hostname`")

7bbb7083adf5a02688308c3befedb09d.png

注:使用$符号去调用某个变量的时候,双引号可以,而单引号不可以。

好了,以上就是今天这篇文章的全部内容了。如果你想及时看到我的文章,只需做这几个动作:点星标、点在看(包括赞)、评论、分享,我就会经常出现在您的常读列表,后面更新都会提醒。感谢大家的关注和支持,祝大家生活美满,学业有成,事业蒸蒸日上!

最后,星标设置如下:

e1595c6aa70b618aca366afee09891f2.png

如下即设置成功!

fb9458aa19e4859aa4771f01991bed43.png

往期精彩文章推荐(点击下方蓝字即可阅读!)

往期推荐

什么是DNS服务?域名解析的工作原理是什么?

7.24运维日,只有运维才懂的压力

一文带你快速理解什么是Samba服务

什么是生成式AI?什么是AIGC?

一文带你快速理解什么是NFS?

一文带你快速理解什么是FTP文件传输服务

什么是数据同步服务RSYNC?

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

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

相关文章

索引结构—B+Tree索引、Hash索引、Full-Text(全文)索引、R-Tree(空间)索引

一、概述 在数据库系统中,索引是一种用于加快数据检索的数据结构。不同的索引结构适用于不同的查询场景和数据特性。索引按照不同角度可以划分不同类型的索引。按照数据结构可以划分BTree索引、Hash索引、FULL TEXT(全文)索引、R-Tree&#…

python inf是什么意思

INF / inf:这个值表示“无穷大 (infinity 的缩写)”,即超出了计算机可以表示的浮点数的范围(或者说超过了 double 类型的值)。例如,当用 0 除一个整数时便会得到一个1.#INF / inf值;相应的,如果…

卡码网KamaCoder 103. 水流问题

题目来源&#xff1a;103. 水流问题 C题解&#xff1a;从边界往高处走&#xff0c;走过的地方做标记。第一组边界跟第二组边界能走到的地方取交集。 代码来源代码随想录。&#xff08;虽然思路一样&#xff0c;但人家代码写得比我好哇&#xff09; #include <iostream>…

pyinstaller带浏览器一起打包playwright 独立运行exe

前置条件 没有安装自带环境&#xff0c;则 playwright install 安装了自带的浏览器 查看playwright的浏览器的位置 playwright install --dry-run 打开此文件夹可以看到 新建一个多层级目录playwright\driver\package.local-browsers 然后复制chromium-1124到playwright\dr…

听说它可以让代码更优雅

一提到静态代码检查工具这个词应该比较好理解&#xff0c;所谓静态代码检查工具就是检查静态代码的工具&#xff0c;完美~ 言归正传&#xff0c;相信很多程序员朋友都听说过静态代码检查工具这个概念&#xff0c;它可能是我们IDE里的某一个插件&#xff0c;可能是计算机中的一…

比 faster-whisper 至少快10倍的音视频转换文字

背景介绍 前两天我自己玩玩搞搞一个音频转文字服务&#xff0c;基于 faster-whisper&#xff0c;本想着这个已经是很快的了&#xff0c;没想到还有比它更快的&#xff0c;今天就来介绍使用一下。 FunClip&#xff0c;是阿里巴巴推出的一个智能视频剪辑工具&#xff0c;它结合…

计算机毕业设计选题推荐-某炼油厂盲板管理系统-Java/Python项目实战

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

[Bugku] web-CTF靶场详解!!!

平台为“山东安信安全技术有限公司”自研CTF/AWD一体化平台&#xff0c;部分赛题采用动态FLAG形式&#xff0c;避免直接抄袭答案。 平台有题库、赛事预告、工具库、Writeup库等模块。 ------------------------------- Simple_SSTI_1 启动环境&#xff1a; 页面提示传入参数f…

【Qt】QLCDNumberQProgressBarQCalendarWidget

目录 QLCDNumber 倒计时小程序 相关属性 QProgressBar 进度条小程序 相关设置 QLCDNumber QLCDNumber是Qt框架中用于显示数字或计数值的小部件。通常用于显示整数值&#xff0c;例如时钟、计时器、计数器等 常用属性 属性说明intValueQLCDNumber显示的初始值(int类型)va…

【全面介绍下Gitea,什么是Gitea?】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

这几个高级爬虫软件和插件真的强!

亮数据&#xff08;Bright Data&#xff09; 亮数据是一款强大的数据采集工具&#xff0c;以其全球代理IP网络和强大数据采集技术而闻名。它能够轻松采集各种网页数据&#xff0c;包括产品信息、价格、评论和社交媒体数据等。 网站&#xff1a;https://get.brightdata.com/we…

ubuntu安装并配置flameshot截图软件

参考&#xff1a;flameshot key-bindins 安装 sudo apt install flameshot自定义快捷键 Settings->Keyboard->View and Customize Shortcuts->Custom Shortcuts&#xff0c;输入该快捷键名称&#xff08;自定义&#xff09;&#xff0c;然后输入command&#xff08;…

RFID物流智能锁在物流锁控领域的意义与应用

在当今全球化和电子商务迅速发展的时代&#xff0c;物流行业作为经济的重要支撑&#xff0c;面临着日益增长的安全、效率和管理需求。物流锁控作为保障货物在运输过程中安全与完整的关键环节&#xff0c;传统的机械锁和简单电子锁已经难以满足现代物流复杂多变的业务场景。 一、…

前缀表达式(波兰式)和后缀表达式(逆波兰式)的计算方式

缀是指操作符。 1. 前缀表达式&#xff08;波兰式&#xff09; &#xff08;1&#xff09;不需用括号&#xff1b; &#xff08;2&#xff09;不用考虑运算符的优先级&#xff1b; &#xff08;3&#xff09;操作符置于操作数的前面。&#xff08;如 3 2 &#xff09; 1.1 中…

3.5.3、查找和排序算法-插入类排序和选择类排序

术语说明 稳定&#xff1a;如果a原本在b前面&#xff0c;而ab,排序之后a仍然在b的前面&#xff1b; 不稳定&#xff1a;如果a原本在b的前面&#xff0c;而ab,排序之后a可能会出现在b的后面&#xff1b; 例如&#xff1a;数组{1,2,3,3,4,7,6}。如果排序后&#xff0c;两个3的位…

【嵌入式之RTOS】死锁问题详解

目录 一、什么是死锁 二、产生死锁的四个必要条件 三、避免死锁的方法 四、实际应用中的考虑 一、什么是死锁 死锁&#xff08;Deadlock&#xff09;是多任务或多线程环境中一个常见的问题&#xff0c;尤其是在实时操作系统&#xff08;RTOS&#xff09;中&#xff0c;如果…

kvm虚拟化平台部署

kvm虚拟化平台部署 kvm概念简介 kvm自linux2.6版本以后就整合到内核中&#xff0c;因此可以看做是一个原生架构. kvm虚拟化架构 硬件底层提供物理层面的硬件支持 linux&#xff08;host&#xff09;&#xff0c;就相当于这个架构中的宿主机&#xff0c;上面运行了多个虚拟机。…

替换后端国外身份目录服务,宁盾身份域管接管FileNet助力国产化升级

IBM FileNet 是一款优秀的企业内容管理解决方案&#xff0c;为客户提供了领先的文档管理和流程管理集成环境&#xff0c;被大量企业所采用。FileNet 需要使用企业级的目录服务器&#xff08;LDAP&#xff09;作为其用户管理系统&#xff0c;满足其认证和授权的需求。对于 LDAP …

最高200万!苏州成都杭州的这些AI政策补贴,你拿到了吗?

随着全球人工智能技术的迅猛发展&#xff0c;地方政府纷纷出台相关政策以抢占未来科技的制高点。苏州 成都 杭州这三个城市更是推出了一系列AI政策补贴&#xff0c;旨在通过多方面支持&#xff0c;推动本地AI产业的发展。本文将带你了解目前不完全统计到的苏州 成都 杭州三地AI…

【Vulnhub系列】Vulnhub_pipe 靶场渗透(原创)

【Vulnhub系列靶场】Vulnhub-pipe 靶场渗透 原文转载已经过授权 原文链接&#xff1a;Lusen的小窝 - 学无止尽&#xff0c;不进则退 (lusensec.github.io) 一、环境配置 1、解决IP扫描不到问题 2、打开虚拟机&#xff0c;并修改网络连接模式为【NAT】即可 二、信息收集 1…