我要学kali-linux之shell脚本编程1

声明! 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关,切勿触碰法律底线,否则后果自负!!!!有兴趣的小伙伴可以点击下面连接进入b站主页[B站泷羽sec](https://space.bilibili.com/350329294)

shell脚本1,创建、执行、变量使用

1,创建一个脚本 1.sh vim 1.sh

Linux中三种常见的Shell解释器

1. Sh (Bourne Shell)

简介

  • Sh,即Bourne Shell,最早由Stephen Bourne在20世纪70年代为UNIX系统开发。
  • 它是许多其他Shell的基础,包括Bash。

特点

  • 基础性:作为最早的Shell之一,它的语法和功能相对简单,但非常高效。
  • 兼容性:几乎所有UNIX和Linux系统都包含Sh,且许多系统脚本都是用Sh编写的。
  • 编程能力:在脚本编程方面表现优秀,但在用户交互方面相对较弱。

使用场景

  • 适用于编写系统启动和关闭脚本。
  • 用于编写需要在多种UNIX系统上运行的脚本,因为Sh几乎在所有UNIX系统上都可用。

2. Bash (Bourne Again Shell)

简介

  • Bash是Bourne Shell的扩展,旨在提供更多的功能和更好的用户体验。
  • 它是大多数Linux发行版的默认Shell。

特点

  • 功能强大:提供命令补全、命令编辑和命令历史表等功能。
  • 扩展性:包含了许多C Shell和Korn Shell中的优点,有灵活和强大的编程接口。
  • 用户友好:具有友好的用户界面,适合新手和专家用户。

使用场景

  • 适用于日常的命令行操作和脚本编写。
  • 适合需要复杂命令和脚本处理的场景。

3. Dash (Debian Almquist Shell)

简介

  • Dash是Bash的一个轻量级替代品,最初从NetBSD的ash发展而来。
  • 它被设计为尽可能小和高效,同时保持POSIX标准的兼容性。

特点

  • 小巧高效:比Bash小得多,适合资源受限的环境。
  • POSIX兼容:严格遵循POSIX标准,确保脚本的可移植性。
  • 安全性:由于代码简洁,漏洞较少,相对更安全。

使用场景

  • 适用于嵌入式系统和其他资源受限的环境。
  • 用于编写需要高效执行的脚本。

Shell名称

简介

特点

使用场景

Sh

最早的Shell之一

基础性、兼容性、编程能力强

系统脚本、多种UNIX系统

Bash

Bourne Shell的扩展

功能强大、扩展性好、用户友好

日常操作、复杂命令处理

Dash

Bash的轻量级替代品

小巧高效、POSIX兼容、安全性高

嵌入式系统、资源受限环境

可以发现这三种解释器最后调用的都是dash解释器

三种方法执行创建的脚本

1,执行第一步创建的1.sh脚本

注意权限的赋予。可以看看一个新创建sh脚本的初始权限

拥有者只有可读可写的权限,没有执行权限。

chmod +x new.sh默认给拥有者/拥有组/其他人都赋予了执行权限

2,直接新建一个sh文件默认是没有执行权限的,但是使用编辑器命令sh 2.sh/bash 2.sh/dash 2.sh就可以不需要给执行权限直接执行

脚本执行器能够直接执行没有执行权限的shell脚本,这通常是由于以下原因:

  1. 解释器的权限:在Linux系统中,解释器(如Bash、Sh等)本身具有执行权限。当使用解释器直接执行脚本时,例如通过bash script.sh 或sh script.sh ,解释器会读取脚本内容并逐行执行。这种方式并不依赖于脚本本身的执行权限,而是依赖于解释器的权限。
  2. 脚本的可读性:即使脚本没有执行权限,只要它具有读权限,解释器就能够读取脚本内容并执行。这是因为解释器只需要能够读取脚本内容,而不需要脚本本身具有执行权限。
  3. 特殊情况:在某些特殊情况下,例如使用source命令或.命令来执行脚本,脚本的执行并不依赖于脚本的执行权限。这种方式通常用于在当前Shell环境中执行脚本内容。

3,source命令执行shell脚本

source命令是一个非常有用的工具,主要用于在当前Shell环境中读取并执行指定文件中的命令。这个命令通常用于加载配置文件或执行脚本内容,而不需要启动一个新的子Shell。

主要用途

source命令的主要用途包括:

  1. 加载配置文件:例如,加载.bashrc或.profile等配置文件,以便在当前Shell环境中应用配置。
  2. 执行脚本内容:可以直接执行脚本文件中的命令,而不需要赋予脚本执行权限。

使用方法

source命令的基本使用方法如下:

source filename

或者使用.命令:

. filename

这两种方式是等效的,都可以在当前Shell环境中读取并执行指定文件中的命令。

示例

以下是一些示例,展示了如何使用source命令:

  • 加载.bashrc配置文件
    source ~/.bashrc
  • 执行脚本内容
    source script.sh 
    或者:
    . script.sh 

注意事项

  1. 权限要求:使用source命令时,只需要文件具有读权限即可,不需要文件具有执行权限。
  2. 环境变量:通过source命令加载的配置文件或执行的脚本内容,会影响到当前Shell环境中的变量。

shell编程变量

在 Shell 编程中,变量是用于存储数据值的名称。

定义变量时,变量名不加美元符号($,PHP语言中变量需要),如:

your_name="cyber secruity"

变量名的命名规则:

  • 只包含字母、数字和下划线: 变量名可以包含字母(大小写敏感)、数字和下划线 _,不能包含其他特殊字符。
  • 不能以数字开头: 变量名不能以数字开头,但可以包含数字。
  • 避免使用 Shell 关键字: 不要使用Shell的关键字(例如 if、then、else、fi、for、while 等)作为变量名,以免引起混淆。
  • 使用大写字母表示常量: 习惯上,常量的变量名通常使用大写字母,例如 PI=3.14
  • 避免使用特殊符号: 尽量避免在变量名中使用特殊符号,因为它们可能与 Shell 的语法产生冲突。
  • 避免使用空格: 变量名中不应该包含空格,因为空格通常用于分隔命令和参数。

1,给变量赋值(无$符号)——打印输出变量(带$符号)

2,复杂的变量赋值打印输出

3,变量的改变,变量的赋值可以直接覆盖改变

4,变量的拼接

基本语法

在Shell中,变量拼接可以通过多种方式实现。以下是几种常见的方法:

1. 直接拼接

var1="Hello"
var2="World"
result="$var1 $var2"
echo $result

 2. 使用双引号

var1="Hello"
var2="World"
result="$var1$var2"
echo $result 

3. 使用单引号

var1="Hello"
var2="World"
result='$var1 $var2'
echo $result 
# 输出: $var1 $var2

4. 使用花括号

var1="Hello"
var2="World"
result="${var1} ${var2}"
echo $result 
# 输出: Hello World

注意事项

  • 使用双引号时,Shell会自动解析变量,而使用单引号时,变量不会被解析。
  • 使用花括号可以明确变量的边界,特别是在变量名后面紧跟其他字符时,避免歧义。

 

5,只读变量

使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。

下面的例子尝试更改只读变量,结果报错:

运行脚本,结果如下:

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

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

相关文章

概率密度与功率谱密度的理解与仿真

引言 概率密度(Probability Density)是统计学中十分重要的概念之一,其应用广泛;功率谱密度(power spectral density, PSD)则在电子电气行业用得比较多。 在基于雷达的目标检测中:概率密度和功率…

数据中台解决方案

文件是关于数据中台解决方案的详细介绍,内容涵盖了数据中台的定义、建设方案、实施步骤、以及在数字化转型中的作用。以下是对文件内容的分析和总结: 1. 数字化转型背景 国家政策支持:提到了《中华人民共和国国民经济和社会发展第十四个五年…

Spring Task详细讲解

✨Spring Task简介 Spring Task 是 Spring 提供的轻量级定时任务工具,也就意味着不需要再添加第三方依赖了,相比其他第三方类库更加方便易用。可以按照约定的时间自动执行某个代码逻辑。 使用场景: 信用卡每月还款提醒银行贷款每月还款提醒…

RabbitMQ运维

1. 单机多节点 1.1 搭建RabbitMQ ①安装RabbitMQ 略 ②确认RabbitMQ运⾏没问题 #查看RabbitMQ状态 rabbitmqctl status 节点名称: 端口号: 25672:Erlang分布式节点通信的默认端⼝, Erlang是RabbitMQ的底层通信协议.15672: Web管理界⾯的默认端⼝, 通过这个端⼝可以访问R…

AI 1.0公司的节节败退

商汤科技又裁员了,并不算行业新鲜事,新鲜的是,这次裁员发生在积极拥抱大模型之后。 成立于2014年的商汤科技,是2014—2015年的AI 1.0创业潮中拿到第一桶金的领头羊,并率先登陆资本市场,成为AI第一股。某种程…

图片识别为什么要将彩色图像灰度化?

为何在处理图像识别任务时,常需将彩色图像转换为灰度图像?在深入探讨此问题之前,我们首先需要明确“灰度化”的定义。 1、灰度化 灰度化处理,简而言之,是指将彩色图像转换成灰度图像的过程。 在电子显示设备&#xff…

NLP论文速读(微软出品)|使用GPT-4进行指令微调(Instruction Tuning with GPT-4)

论文速读|Instruction Tuning with GPT-4 论文信息: 简介: 这篇论文试图解决的问题是如何通过指令调优(instruction-tuning)提升大型语言模型(LLMs)在执行新任务时的零样本(zero-shot&#xff0…

【金猿案例展】科技日报——大数据科技资讯服务平台

‍ 拓尔思数据要素案例 该数据要素项目案例由拓尔思投递并参与“数据猿年度金猿策划活动——2024数据要素产业年度创新服务企业榜单/奖项”评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 媒体行业企事业单位在数据要素领域得天独厚,日积月累的新闻报道、媒…

1、使用vscode+eide+stm32cubeMx开发stm32

步骤1:在vscode中安装如下的插件 步骤2:点击Embedded IDE,点击“新建项目”-----空项目-----Cortex-M项目。 步骤3:输入项目名,回车后会要制定保存路径,此时就是一个已项目名命名的文件夹。 步骤4&#xff…

〔 MySQL 〕数据类型

目录 1.数据类型分类 2 数值类型 2.1 tinyint类型 2.2 bit类型 2.3 小数类型 2.3.1 float 2.3.2 decimal 3 字符串类型 3.1 char 3.2 varchar 3.3 char和varchar比较 4 日期和时间类型 5 enum和set mysql表中建立属性列: 列名称,类型在后 n…

嵌入式Linux输入系统应用编程学习总结

嵌入式Linux输入系统应用编程学习总结 目录 嵌入式Linux输入系统应用编程学习总结1. 嵌入式Linux输入系统介绍2. Linux设备输入数据的几个结构体2.1 内核中表示一个输入设备的结构体2.2 APP从输入设备获取的数据类型结构体 3. 查看LCD设备信息和输入数据3.1 查看设备信息3.2 使…

解决SpringBoot3的Validated依赖实现自定义注解失效问题

我们引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency> Validated实现自定义注解 我们首先看看自定义注解里面&#xff0c;用到的注解的包 我们…

开箱即用的frp教程及脚本

废话不多说直接上干货 FRP官方&#xff1a;https://github.com/fatedier/frp FRP中文网站&#xff1a;https://gofrp.org/zh-cn/ 准备环境&#xff1a; 带公网的VPS内网Linux主机 一、在VPS上下载frp安装包 这里下载最新版的0.61.0 wget -P /frps https://github.com/fa…

程序员做自媒体,你所不了解的提词器,原来还有这么多大用处

程序猿的出路&#xff0c;不只是外卖员&#xff01; 你或许以为提词器只是个“背词神器”&#xff1f;实际上&#xff0c;它的应用范围早已超出你的想象。从直播到会议&#xff0c;从视频拍摄到户外采访&#xff0c;每一种场景都有对应的提词神器&#xff0c;帮你提升效率、避…

三种单例实现

1、不继承Mono的单例 实现 使用 注&#xff1a; 使用需要继承BaseManager 泛型填写自己本身 需要实现无参构造函数 2、挂载式的Mono单例 实现 使用 注&#xff1a; 使用需要继承SingletonMono 泛型填写自己本身 需要挂载在unity引擎面板 3、不用挂载式的单例 实现 使…

DAY112代码审计PHP开发框架POP链利用Yii反序列化POP利用链

一、pop1链的跟踪 1、路由关系 2、漏洞触发口unserialize(base64_decode($data)); 2、__destruct()&#xff0c;魔术法方法调用close函数方法 3、未找到利用链&#xff0c;尝试__call魔术方法 4、逆推找call_user_func 函数 第一部分 namespace yii\db; class BatchQueryResu…

移动硬盘需要格式化才能打开?详解原因与数据恢复方案

描述移动硬盘需要格式化才能打开 当我们尝试访问移动硬盘时&#xff0c;有时会遇到系统提示“需要格式化才能打开”的情况。这种提示通常意味着硬盘上的文件系统已损坏或无法被系统正常识别。一旦遇到这种情况&#xff0c;很多用户会感到焦虑&#xff0c;因为硬盘中可能存储了…

Java项目实战II基于微信小程序的移动学习平台的设计与实现(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 随着城市化…

项目技术栈-解决方案-注册中心

项目技术栈-解决方案-注册中心 Zookeeper、Eureka、Nacos、Consul和Etcd参考文章 服务注册中心&#xff08;Registry&#xff09;&#xff1a;用于保存 RPC Server 的注册信息&#xff0c;当 RPC Server 节点发生变更时&#xff0c;Registry 会同步变更&#xff0c;RPC Client …

力扣 LeetCode 454. 四数相加II(Day3:哈希表)

解题思路&#xff1a; 使用map 四个数组两两一组 前两个数组的各个值遍历相加&#xff0c;和为key&#xff0c;出现的次数为value 后两个数组的各个值遍历相加&#xff0c;如果该值的负数能在map中找到&#xff08;表示能抵消为0&#xff0c;符合题意四数之和为0&#xff0…