我要学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 命令可以将变量定义为只读变量,只读变量的值不能被改变。

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

运行脚本,结果如下:

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

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

相关文章

尽量通俗易懂地概述.Net U nity跨语言/跨平台相关知识

本文参考来自唐老狮,Unity3D高级编程:主程手记,ai等途径 仅作学习笔记交流分享 目录 1. .Net是什么? 2. .Net框架的核心要点? 跨语言和跨平台 .Net x Unity跨平台发展史 Net Framework 2002 Unity跨平台之 Mono 2004 Unity跨平台之 IL2CPP 2015 二者区别 .NET Core …

大陆 ARS513 / ARS510 标准雷达(解析二)

1。GW_ACU (0x40) • GW_ACU_LongAccel Longitudinal acceleration of ego vehicle. • GW_ACU_LongAccel_ValidFlag Valid flag of signal “GW_ACU_LongAccel”. • GW_ACU_LateralAccel Lateral acceleration of ego vehicle. Signal quality requirements for “GW_ACU_La…

【游戏引擎之路】登神长阶(十四)——OpenGL教程:士别三日,当刮目相看

【游戏引擎之路】登神长阶(十四)——OpenGL教程:士别三日,当刮目相看 2024年 5月20日-6月4日:攻克2D物理引擎。 2024年 6月4日-6月13日:攻克《3D数学基础》。 2024年 6月13日-6月20日:攻克《3D…

【C++动态规划】2304. 网格中的最小路径代价|1658

本文涉及知识点 C动态规划 LeetCode2304. 网格中的最小路径代价 给你一个下标从 0 开始的整数矩阵 grid ,矩阵大小为 m x n ,由从 0 到 m * n - 1 的不同整数组成。你可以在此矩阵中,从一个单元格移动到 下一行 的任何其他单元格。如果你位…

数据中台解决方案

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

JS 实现WebSocket通讯和什么是WebSocket

WebSocket 介绍: WebSocket 是一种网络传输协议,可在单个 TCP 连接上进行全双工通信。它允许服务器主动向客户端推送信息,客户端也能实时接收服务器的响应。 客户端 这里实现了将input内的内容发送给客户端,并将接收到的服务器的…

K8S单节点部署及集群部署

1.Minikube搭建单节点K8S 前置条件:安装docker,注意版本兼容问题 # 配置docker源 wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo# 安装docker环境依赖 yum install -y yum-utils device-m…

算法闭关修炼百题计划(六)

塔塔开(滑稽 1.删除排序链表中的重复元素2.删除排序链表中的重复元素II3.字典序的第k小数字4.下一个排列5.排序链表6.随机链表的复制7.数据流的中位数 1.删除排序链表中的重复元素 使每个元素就出现一次 class Solution { public:ListNode* deleteDuplicates(ListNode* head)…

PH热榜 | 2024-11-13

DevNow 是一个精简的开源技术博客项目模版,支持 Vercel 一键部署,支持评论、搜索等功能,欢迎大家体验。 在线预览 1. Agree.com 标语:人人免费电子签名! 介绍:Agree,这款由人工智能驱动的平台…

PTE-中间件安全

DOCKER环境,一般是80 8080 8081端口 1 apache位置扩展名解析漏洞 cd vulhub-master/httpd/apache_parsing_vulnerability/ docker-compose up -d 修改一句话的后缀 直接上传 蚁剑 2 CVE-2017-15715 docker-compose stop cd .. cd CVE-2017-15715/ dock…

【Linux】Github 仓库克隆速度慢/无法克隆的一种解决方法,利用 Gitee 克隆 Github 仓库

Github 经常由于 DNS 域名污染以及其他因素克隆不顺利。 一种办法是修改 hosts sudo gedit /etc/hosts加上一行 XXX.XXX.XXX.XXX github.comXXX 位置的 IP 可以通过网站查询 IP/服务器github.com的信息-站长工具 这种方法比较适合本身可以克隆,但是速度很慢的…

Elasticsearch 8.16:适用于生产的混合对话搜索和创新的向量数据量化,其性能优于乘积量化 (PQ)

作者:来自 Elastic Ranjana Devaji, Dana Juratoni Elasticsearch 8.16 引入了 BBQ(Better Binary Quantization - 更好的二进制量化)—— 一种压缩向量化数据的创新方法,其性能优于传统方法,例如乘积量化 (Product Qu…

MySQL数据库常用命令大全(完整版——表格形式)

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 ✨特色专栏&#xff1a…

微型导轨在自动化生产线中起什么作用?

在现代制造业的飞速跃进中,自动化生产线的蓬勃发展引领了一场效率与质量的双重革命。微型导轨作为传动领域的重要零部件,可用于工业自动化生产线上的零件运输、加工设备定位等,实现自动化生产和减少人力成本。那么,微型导轨在自动…

Flutter 小技巧之 Shader 实现酷炫的粒子动画

在之前的《不一样的思路实现炫酷 3D 翻页折叠动画》我们其实介绍过:如何使用 Shader 去实现一个 3D 的翻页效果,具体就是使用 Flutter 在 3.7 开始提供 Fragment Shader API ,因为每个像素都会过 Fragment Shader ,所以我们可以通…

c++实现B树(下)

书接上回小吉讲的是B树的搭建和新增方法的实现(blog传送门🚪:B树实现上)(如果有小可爱对B树还不是很了解的话,可以先看完上一篇blog,再来看小吉的这篇blog)。那这一篇主要讲的是B树中…

【Oracle篇】掌握SQL Tuning Advisor优化工具:从工具使用到SQL优化的全方位指南(第六篇,总共七篇)

💫《博主介绍》:✨又是一天没白过,我是奈斯,DBA一名✨ 💫《擅长领域》:✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux,也在扩展大数据方向的知识面✌️…

使用Java绘制图片边框,解决微信小程序map组件中marker与label层级关系问题,label增加外边框后显示不能置与marker上面

今天上线的时候发现系统不同显示好像不一样,苹果手机打开的时候是正常的,但是一旦用安卓手机打开就会出现label不置顶的情况。尝试了很多种办法,也在官方查看了map相关的文档,发现并没有给label设置zIndex的属性,只看到…

关于sass在Vue3中编写bem框架报错以及警告问题记录

在编写完bem框架后 在vite.config.ts文件进行预编译处理时,报错的错误 1. 处理方式:使用新版api, 如图: 2. 处理方式:使用 use 替换掉 import, 如图: 3. 处理方式:使用路径别名&am…

BizDevOps:从理念到实践,贯通企业全链路协同

👆 点击蓝字 关注我们 引言 BizDevOps的概念由DevOps发展和进化而来,其目标超越了开发和运维的协同,进一步实现业务、研发和运维的全链条协作,让业务作为价值的起点及核心目标。 BizDevOps的核心驱动力在于解决效率和正确性上的割…