【Linux】shell基础,shell脚本

news2025/1/16 7:46:29

Shell
Shell是一个用C语言编写的程序,接受用户输入的命令,并将其传递给操作系统内核执行。Shell还负责解释和执行命令、管理文件系统、控制进程,是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言
Shell脚本
Shell脚本(shell script),是一种为shell编写的脚本程序。一般提到shell通常都是指shell脚本,但shell和shell script是两个不同的概念

1. Shell环境

Shell编程跟JavaScript、php编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以。
Linux的Shell种类众多,常见的有:
Bourne Shell(/usr/bin/sh或/bin/sh)
Bourne Again Shell(/bin/bash)
C Shell(/usr/bin/csh)
K Shell(/usr/bin/ksh)
Shell for Root(/sbin/sh)
由于易用和免费,bash在日常工作中被广泛使用。同时,bash也是大多数Linux系统默认的Shell。
#!告诉系统其后路径所指定的程序即是解释此脚本文件的Shell程序。

2. 运行Shell脚本两种方法

1、作为可执行程序
例如将代码保存为test.sh,并cd到相应目录:
chmod +x ./test.sh #使脚本具有执行权限
./test.sh #执行脚本
注意,一定要写成./test.sh,而不是test.sh,运行其它二进制的程序也一样,直接写test.sh,linux系统会去PATH里寻找有没有叫test.sh的,而只有/bin,/sbin,/usr/bin,/usr/sbin等在PATH里,当前目录通常不在PATH里,所以写成test.sh是会找不到命令的,要用./test.sh告诉系统说,就在当前目录找。
2、作为解释器参数
这种运行方式是,直接运行解释器,其参数就是shell脚本的文件名,如:
/bin/sh test.sh
/bin/php test.php
这种方式运行的脚本,不需要在第一行指定解释器信息,写了也没用。

反引号 `,内容当命令执行
单引号 ‘’, 所有字符当作普通字符处理
双引号 “” ,变量会展开为对应的值

3. Shell变量

命名只允许数字、字母和下划线,且不能以数字开头。
大写字母表示常量,避免使用特殊含义的名字比如root、home。
赋值时等号两侧无多余空格,var_name=1;
使用变量值时用美元符号,$var_name
只读变量,比如设置PI=3.1415readonly PI,后续则不能给PI变量赋值
删除变量,unset var,删除后变量不能继续使用,但不能删除只读变量
变量类型,默认变量视为字符串,通过declare或typese命令声明整数变量,declare -i var_integer=54
字符串变量,string=”abcdefg”
echo ${#string}输出字符串长度
echo ${string:1:4}输出字符串第2-5个字符
shell数组,用括号表示数组,元素用空格符隔开
数组名=(元素1 元素2 … 元素n)统一定义;数组名[0]=元素1进行单独定义
${数组名[下标]}进行取值

4. Shell注释

#号开头的行作为注释内容,单行注释

# 注释内容

:’’进行多行注释,内容放在单引号之中

:'
注释内容
'

5. Shell基本运算

expr是一块表达式计算工具,完成表达式求值操作。必须加反引号将其当命令处理,2+2中间空格不能省

val= `expr 2 + 2`
echo “两数之和为:$val

算术运算
算术运算
关系运算
关系运算
布尔运算
布尔
逻辑运算
逻辑运算
文件测试运算
文件测试运算

6. if 条件语句

条件表达式必须放在方括号内[$a -eq $b],以fi结尾,if翻转

if []; then
	代码块1
else
	代码块2
fi

7. for 循环

for var in item1 item2 … itemN
do
	代码块1
done

8. case…esac多选语句

与switch case语句类似,以esac结束,case翻转

casein
值1)
	代码块
	;;
值2)
	代码块2
	;;
esac

9. read 命令
read [选项] 变量名;标准输入,可以从键盘输入,读取文件一行
read -p “提示信息:” var;
read -s var; 隐藏输入内容
read -n字符数 var; 只接受指定字符数量,
read -t “秒数” var; 等待时间
echo [选项] 内容;标准输出

10. Shell脚本
hello world入门

root@Ubuntu:~# cat > hello.sh
#!/bin/bash
echo "hello world!"
root@Ubuntu:~# bash hello.sh
hello world!

当前用户为root,~表示在默认工作目录下工作,一般root默认在/root下工作,普通用户在/home下自己的单独目录下。
cat > hello.sh可以进行输入操作,
输入#!/bin/bashecho "hello world!"后ctrl+c强制结束
使用bash命令或者./或者/bin/bash 接文件名进行运行,./运行一般需要x权限

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

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

相关文章

【笔记】债务危机

文章目录 大图景典型债务大周期基础概念债务的形成货币政策利率驱动印钞、购买金融资产为消费者提供资金 典型长期债务周期/债务大周期模型长期债务周期过程的形成过程 典型通缩型债务周期早期阶段泡沫阶段具体形成过程货币政策的作用泡沫特征 顶部萧条阶段和谐的去杠杆化无力时…

电脑文件x3daudio1 7.dll怎么修复?快速修复x3daudio1 7.dll的方法

你试过电脑文件x3daudio1 7.dll丢失么?如果你有遇到这种情况,那么可能你的某些程序就会启动不了,毕竟这个文件是用来处理音频功能的,那么我们要怎么去修复?下面我们一起来详细的了解电脑文件x3daudio1 7.dll这个文件吧…

QT--3

Qt 1>将文本编辑器完整实现 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);this->resize(800,600);edit1 new QTextEdit(this);edit1->resize(600…

情感分类学习笔记(1)

文本情感分类(二):深度学习模型 - 科学空间|Scientific Spaces 一、代码理解 cw lambda x: list(jieba.cut(x)) #定义分词函数 您给出的代码定义了一个使用 jieba 分词库的分词函数。jieba 是一个用于中文分词的 Python 库。该函数 cw 是…

二重积分(深度解析)

二重积分是二元函数在空间上的积分,同定积分类似,是某种特定形式的和的极限。本质是求曲顶柱体体积。重积分有着广泛的应用,可以用来计算曲面的面积,平面薄片重心等。平面区域的二重积分可以推广为在高维空间中的(有向…

Kafka 业务日志采集最佳实践

简介 Apache Kafka 是一个分布式流处理平台,主要用于构建实时数据流管道和应用程序。在收集业务日志的场景中,Kafka 可以作为一个消息中间件,用于接收、存储和转发大量的日志数据。将 Kafka 与其他系统(如 Elasticsearch、Flume、…

steam_api64.dll是什么东西?steam_api64.dll缺失的多个详细解决方法

在现代PC游戏领域,Steam无疑是最具影响力的游戏分发和社交平台之一。它不仅提供了一个庞大的游戏市场,还集成了好友系统、成就系统、云存储等多种功能,为数百万玩家提供了便捷的游戏体验。在这庞大的生态系统中,steam_api64.dll作…

vue3 依赖-组件tablepage-vue3版本1.0.3更新内容

github求⭐ 可通过github 地址和npm 地址查看全部内容 vue3 依赖-组件tablepage-vue3说明文档,列表页快速开发,使用思路及范例-汇总 vue3 依赖-组件tablepage-vue3说明文档,列表页快速开发,使用思路及范例(Ⅰ&#…

DDPM与扩散模型

很早之前就新建了一个专栏从0开始弃坑扩散模型 ,但发了一篇文章就没有继续这一系列,在这个AIGC的时代,于是我准备重启这个专栏。 整个专栏的学习顺序可以见这篇汇总文章 这是本专栏的第一章 目录 引言生成模型的发展历程 引言 扩散模型( Diffusion Mode…

C数据结构:栈

目录 栈的作用 栈的实现 栈的数据结构 栈的初始化 栈的销毁 栈的插入 栈的删除 获得栈顶元素 获得栈有效元素个数 判断栈是否为空 栈的使用 完整代码 栈是一种特殊结构的线性表 先来看看栈的图 之所以说它特殊,是因为它的插入删除功能比较特殊 栈的插…

DBdoctor产品介绍

基本信息 DBdoctor是聚好看科技股份有限公司自主研发的一款数据库内核级性能诊断工具,首次将eBPF技术聚焦在了数据库领域,一分钟内定位数据库性能问题并给出优化建议,实现数据库性能诊断百倍提效。 免费下载 请在PC端打开以下链接&#x…

Burp Suite抓取明文

目录 Burp Suite代理 正常的通信模式 Burp Suite代理后通信模式 设置代理 安装证书 导出证书 Burp Suite导入 浏览器下载证书 安装证书 管理证书 导入证书 下一步 导入证书 下一步 完成 抓明文的例子 1、修改浏览器代理 ​编辑2、开启拦截​编辑 3、查看抓取历…

NSS题目练习

[SWPUCTF 2021 新生赛]gift_F12 通过题目提示可以知道flag应该可以在源代码中找到 查看源代码,直接用 ctrlf 搜索flag即可 [SWPUCTF 2021 新生赛]jicao 题目打开后能看到一串php代码,要求是用post传参传入idwllmNB以及用get传参传入json[x]"wllm&q…

YoloV5的学习与使用

前言 Yolo算法简介 YOLO (You Only Look Once) 是一种用于目标检测的深度学习算法,由 Joseph Redmon、Santosh Divvala、Ross Girshick 和 Ali Farhadi 在 2015 年提出。YOLO 是一种端到端的算法,它将目标检测任务视为一个单一的回归问题,从…

Web3钱包开发获取测试币-OKB X1Testnet(三)

Web3钱包开发获取测试币-OKB X1Testnet(三) 基于以上两篇 Web3钱包开发获取测试币-Polygon Mumbai(一) :https://suwu150.blog.csdn.net/article/details/137949473Web3钱包开发获取测试币-Base Sepolia(二):https://suwu150.blog.csdn.net/article/det…

【HTTP下】总结{重定向/cookie/setsockopt/流操作/访问网页/总结}

文章目录 1.请求头2.cookie理解 3.vim跳转/搜索4.setsockopt被重用的意思 5.流操作5.1定位读取指针5.2ifstram::read() 6.总结6.1 百度搜索框搜索功能字符6.2请求uri请求和响应的第一行都有http版本请求内容里有GET /favicon.ico HTTP/1.1 6.3访问网页Fiddler抓包原理&#xff…

从零开始的软件测试学习之旅(九)jmeter直连数据库及jmeter断言,关联

jmeter直连数据库及断言,关联 jmeter直连数据库步骤jmeter断言jmeter逻辑控制器if控制器ForEach控制器循环控制器 Jmeter关联Jmeter关联XPath提取器Jmeter关联正则表达式提取器二者比较跨线程组关联 每日复习 jmeter直连数据库 概念 这不叫直连:Jmeter -> java/python 提供的…

W801学习笔记二十四:NES模拟器游戏

之前已经实现了NES模拟器玩游戏。W801学习笔记九:HLK-W801制作学习机/NES游戏机(模拟器) 现在要在新版本掌机中移植过来。 1、把NES文件都拷贝到SD卡中。 这回不会受内存大小限制了。我这里拷贝了4个,还可以拷贝更多。 2、应用初始化中,加载…

Spring:OAuth2.0

文章目录 一、认证与授权二、OAuth2.0介绍 一、认证与授权 认证(Authentication)与授权(Authorization)在网络安全和系统管理中是两个重要的概念,它们各自有不同的作用和目标。 认证是验证确认身份以授予对系统的访问…

编辑员工信息——后端

需求: 在员工管理列表页面点击编辑按钮,跳转到编辑页面,在编辑页面回显员工信息并进行修改,最后点击保存按钮完成编辑操作。 代码开发流程: 点击编辑按钮,页面跳转到add.html,并在url中携带参…