shell脚本(1)

免责声明

学习视频来自B 站up主泷羽sec,如涉及侵权马上删除文章。

笔记的只是方便各位师傅学习知识,以下代码、网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负。

Shell脚本

建立一个sh脚本

touch 1.sh (新建脚本文件)
vi 1.sh(编写文件内容)
按 i 可以写入内容,按esc :wq退出并保存

解释

1、创建脚本文件

2、脚本文件中第一行为指定脚本编译器:# !/bin/bash

最终调用的都是dash

执行shell脚本命令: 1、./1.sh

难道我们必须要修改权限才能执行sh脚本吗?让我们看一下接下来的两种方式。

2、bash+文件名相对路径\绝对路径3、.sh+文件名相对路径\绝对路径

当然我们的source也可以执行 4、source+文件名相对路径\绝对路径

shell脚本变量

在Kali Linux系统中,系统变量(也称为环境变量)是在整个用户会话或整个操作系统中可用的变量。这些变量可以存储诸如路径、配置信息、用户设置等数据,并且可以在系统中的多个程序和脚本之间共享。以下是 一些常见的Kali Linux系统变量及其作用域:

全局系统变量(作用于整个操作系统)

  1. PATH

    • 作用:包含可执行文件的目录列表,当用户在终端输入命令时,系统会在这些目录中查找相应的可执行文件。

    • 示例/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

  2. HOME

    • 作用:指向当前用户主目录的路径。

    • 示例/home/user

  3. USER

    • 作用:当前登录用户的用户名。

    • 示例kali

  4. SHELL

    • 作用:当前用户登录的shell类型。

    • 示例/bin/bash

  5. LANG

    • 作用:定义系统的语言和字符集。

    • 示例en_US.UTF-8

  6. PWD

    • 作用:当前工作目录的绝对路径。

    • 示例/home/user/projects

用户级别的环境变量

用户可以在自己的主目录下的.bashrc.profile文件中设置特定的环境变量,这些变量仅对该用户会话有效。

设置用户级别的环境变量
  1. 打开终端。

  2. 编辑 .bashrc 文件:
    nano ~/.bashrc
    
  3. 添加新的环境变量:
    export MY_VARIABLE="my_value"
    
  4. 使更改生效:
    source ~/.bashrc
    

使用 envprintenv 命令查看环境变量

  • **env**:显示当前所有的环境变量。

  • **printenv**:可以查看特定环境变量的值,例如:
    printenv PATH
    

注意事项

  • 修改系统级别的环境变量通常需要管理员权限。

  • 对于临时设置环境变量,可以在当前终端会话中使用 export 命令,但该设置不会在新的终端窗口或会话中保留。

在Kali Linux系统中,设置持续化变量(永久环境变量)意味着要配置环境变量,使其在系统重启后仍然有效。这通常涉及到修改用户级别的配置文件(如.bashrc.profile)或系统级别的配置文件(如/etc/profile)。以下是设置Kali Linux中持续化变量的步骤:

设置用户级别的永久环境变量

  1. 打开终端。

  2. 编辑用户级别的配置文件。对于Bash shell用户,通常是.bashrc文件;对于Zsh shell用户,则是.zshrc文件。

    nano ~/.bashrc
    
  3. 添加新的环境变量,并使用export命令。例如:

    export MY_VARIABLE="my_value"
    
  4. 保存文件并退出编辑器。

  5. 使更改生效,执行以下命令:

    source ~/.bashrc
    

设置系统级别的永久环境变量

对于系统级别的环境变量,需要编辑/etc/profile文件。请使用root权限执行以下操作:

  1. 打开终端。

  2. 使用文本编辑器打开/etc/profile文件。例如,使用nano编辑器:

    sudo nano /etc/profile
    
  3. 在文件末尾添加新的环境变量,并使用export命令。例如:

    export SYSTEM_VARIABLE="system_value"
    
  4. 保存文件并退出编辑器。

  5. 使更改生效,执行以下命令:

    source /etc/profile
    

临时环境变量

通过在变量前加上export,将变量变为临时环境变量。

在Kali Linux系统中,临时环境变量是指仅在当前终端会话中有效的变量。一旦关闭终端或会话结束,这些变量就会丢失。设置临时环境变量非常简单,只需在终端中使用export命令即可。

设置临时环境变量

  1. 打开终端。

  2. 使用export命令设置临时环境变量。例如:

    export TEMP_VARIABLE="temp_value"
    

查看临时环境变量

  • 使用env命令查看当前所有的环境变量,包括临时设置的变量:

    env | grep TEMP_VARIABLE
    
  • 或者使用printenv命令查看特定临时环境变量的值:

    printenv TEMP_VARIABLE
    

注意事项

  • 临时环境变量仅在当前终端会话中有效,关闭终端或会话结束后,这些变量将不再存在。

  • 如果需要在多个终端会话中共享变量,建议设置持续化环境变量(永久环境变量)。

自定义变量(普通变量作用域:当前解释器)

在Kali Linux系统中,自定义变量(普通变量)通常指的是在脚本或命令行中定义的局部变量,其作用域仅限于当前解释器会话或脚本执行期间。这些变量不会影响到其他终端会话或全局环境变量。

设置自定义变量

  1. 在脚本中设置自定义变量

    打开一个文本编辑器,创建一个新的脚本文件,例如my_script.sh,并在其中定义变量:

    #!/bin/bash
    MY_CUSTOM_VAR="Hello, Kali!"
    echo $MY_CUSTOM_VAR
    

    保存文件并赋予执行权限:

    chmod +x my_script.sh
    

    运行脚本:

    ./my_script.sh
    

    输出将是:

    Hello, Kali!
    
  2. 在命令行中设置自定义变量

    在终端中直接定义变量并使用:

    MY_CUSTOM_VAR="Hello, Kali!"
    echo $MY_CUSTOM_VAR
    

    输出将是:

    Hello, Kali!
    

注意事项

  • 自定义变量的作用域仅限于当前解释器会话或脚本执行期间。

  • 变量名通常以字母或下划线开头,后面可以跟字母、数字或下划线。

  • 变量值可以是字符串、数字或其他类型的数据。

通过以上步骤,您可以在Kali Linux系统中轻松地创建和使用自定义变量,这些变量仅在当前解释器会话中有效。

eg:
定义一个name变量:name=”leyinsec”
利用echo打印输出echo $name

注:空格需要用引号,引起来(空格代表结束)

变量作用域

在Kali Linux系统中,变量的作用域决定了变量在何处以及如何被访问。以下是几种常见的变量作用域:

1. 局部变量(Local Variables)

  • 作用域:仅在定义它们的函数或代码块内有效。

  • 示例
    function my_function() {local MY_VAR="This is local"echo $MY_VAR
    }
    my_function
    echo $MY_VAR  # 这将不会输出任何内容,因为MY_VAR在函数外部不可见
    

2. 全局变量(Global Variables)

  • 作用域:在整个脚本或程序中有效,包括所有函数和代码块。

  • 示例
    MY_VAR="This is global"
    function my_function() {echo $MY_VAR
    }
    my_function
    echo $MY_VAR  # 这将输出 "This is global"
    

3. 环境变量(Environment Variables)

  • 作用域:在整个用户会话或整个操作系统中有效。

  • 设置
    export MY_ENV_VAR="This is an environment variable"
    
  • 查看
    printenv MY_ENV_VAR
    

4. 用户级别的环境变量

  • 作用域:仅对当前用户有效。

  • 设置
    echo "export MY_USER_VAR='This is a user-specific environment variable'" >> ~/.bashrc
    source ~/.bashrc
    

5. 系统级别的环境变量

  • 作用域:对所有用户有效。

  • 设置
    sudo sh -c 'echo "export MY_SYSTEM_VAR='This is a system-wide environment variable'" >> /etc/profile'
    source /etc/profile
    

6. 临时变量(Temporary Variables)

  • 作用域:仅在当前终端会话中有效。

  • 设置
    export TEMP_VAR="This is temporary"
    
  • 关闭终端后,TEMP_VAR将不再存在

总结

  • 局部变量:仅在定义它们的函数或代码块内有效。

  • 全局变量:在整个脚本或程序中有效。

  • 环境变量:在整个用户会话或整个操作系统中有效。

  • 用户级别的环境变量:仅对当前用户有效。

  • 系统级别的环境变量:对所有用户有效。

  • 临时变量:仅在当前终端会话中有效。

特殊变量

在Kali Linux系统中,特殊变量主要指的是那些具有特殊含义和用途的变量。这些变量由Bash shell提供,用于在脚本和命令行中存储和传递信息。以下是一些常见的特殊变量及其作用:

特殊变量列表

  • **$0**:当前脚本的文件名。

  • **$n**:传递给脚本或函数的参数。n是一个数字,表示第几个参数。

  • **$#**:传递给脚本或函数的参数个数。

  • **$@**:传递给脚本或函数的所有参数。

  • **$***:传递给脚本或函数的所有参数。被双引号包含时,与$@稍有不同。

  • **$?**:上个命令的退出状态,或函数的返回值。

  • **$$**:当前Shell进程ID。

特殊变量的使用示例

假设我们有一个脚本test.sh,内容如下:

#!/bin/bash
echo "File Name: $0"
echo "First Parameter: $1"
echo "Second Parameter: $2"
echo "Quoted Values: $@"
echo "Quoted Values: $*"
echo "Total Number of Parameters: $#"

运行该脚本并传入两个参数:

./test.sh Zara Ali

输出将是:

File Name: ./test.sh
First Parameter: Zara
Second Parameter: Ali
Quoted Values: Zara Ali
Quoted Values: Zara Ali
Total Number of Parameters: 2

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

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

相关文章

《DiffusionDet: Diffusion Model for Object Detection》ICCV2023

摘要 本文提出了一种新的框架DiffusionDet,它将目标检测任务表述为从带噪声的边界框到目标边界框的去噪扩散过程(如图一所示)。在训练阶段,目标边界框逐渐扩散到随机分布,模型学习逆转这一加噪过程。在推理阶段&#…

ISAAC SIM踩坑记录--ROS2相机影像发布

其实这个例子官方和大佬NVIDIA Omniverse和Isaac Sim笔记5:Isaac Sim的ROS接口与相机影像、位姿真值发布/保存都已经有详细介绍了,但是都是基于ROS的,现在最新的已经是ROS2,这里把不同的地方简单记录一下。 搭建一个简单的场景&a…

outlook邮箱关闭垃圾邮件——PowerAutomate自动化任务

微软邮箱反垃圾已经很强大了非常敏感,自家的域名的邮件都能给扔到垃圾邮箱里,但还是在本地增加了一层垃圾邮箱功能,然后垃圾邮箱并没有提示,导致错过很多通知,本身并没有提供关闭的功能,但微软有个Microsof…

「Py」Python基础篇 之 Python都可以做哪些自动化?

✨博客主页何曾参静谧的博客📌文章专栏「Py」Python程序设计📚全部专栏「Win」Windows程序设计「IDE」集成开发环境「UG/NX」BlockUI集合「C/C」C/C程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「UG/NX」NX定…

candence: 原理图生成网表时报错:Duplicate Pin name “xxx“

原理图生成网表时报错:Duplicate Pin name “xxx” 这个错误的意思是,原理图中管脚命名重复 解决这个问题的方法: 1、绘制元件的时候不要用相同的管脚名,比如GND等的,就稍加个后缀做区分2、就是将管脚属性修改为 &qu…

Diffusion Policy——斯坦福机器人UMI所用的扩散策略:从原理到其编码实现(含Diff-Control、ControlNet详解)

前言 本文一开始是属于此文《UMI——斯坦福刷盘机器人:从手持夹持器到动作预测Diffusion Policy(含代码解读)》的第三部分,考虑后Diffusion Policy的重要性很高,加之后续还有一系列基于其的改进工作 故独立成本文,且写的过程中 …

计算机网络学习笔记-3.2介质访问控制

文章目录 介质访问控制静态划分信道 动态分配信道轮询访问介质访问控制随机访问介质访问控制ALOHA协议简介ALOHA协议的工作原理 介质访问控制 介质访问控制(MAC,Medium Access Control),质访问控制的目的是确保多个设备能够高效、…

GitCode光引计划有奖征文大赛

一、活动介绍 GitCode平台汇聚了众多杰出的G-Star项目,它们犹如璀璨星辰,用各自的故事和成就,为后来者照亮前行的道路。我们诚邀广大开发者、项目维护者及爱好者,共同撰写并分享项目在GitCode平台上托管的体验,挖掘平…

深入理解接口测试:实用指南与最佳实践5.0(三)

✨博客主页: https://blog.csdn.net/m0_63815035?typeblog 💗《博客内容》:.NET、Java.测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识 📢博客专栏: https://blog.csdn.net/m0_63815035/cat…

使用electron-egg把vue项目在linux Ubuntu环境下打包并安装运行

electron-egg一个入门简单、跨平台、企业级桌面软件开发框架https://www.kaka996.com/electron-egg 跳转地址 1,使用 git下载代码到本地,如果没有git需要进行安装 # gitee git clone https://gitee.com/dromara/electron-egg.git # github git clone https://github.com/dro…

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

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

Maven 构建项目

Maven 是一个项目管理和构建工具,主要用于 Java 项目。它简化了项目的构建、依赖管理、报告生成、发布等一系列工作。 构建自动化:Maven 提供了一套标准化的构建生命周期,包括编译、测试、打包、部署等步骤,通过简单的命令就可以执…

任务调度中心-XXL-JOB使用详解

目录 详解 调度中心 执行器 原理 快速入门 源码仓库地址 1.初始化数据库 2.配置调度中心 1.解压源码 2.需改配置文件 3.启动调度中心 3.配置执行器 1.引入pom依赖 2.修改配置文件 3.执行器组件配置 4.部署执行器项目 4.开发第一个任务 BEAN模式(类…

ROM修改进阶教程------安卓14 安卓15去除app签名验证的几种操作步骤 详细图文解析

在安卓14 安卓15的固件中。如果修改了系统级别的app。那么就会触发安卓14 15的应用签名验证。要么会导致修改的固件会进不去系统,或者进入系统有bug。博文将从几方面来解析去除安卓14 15应用签名验证的几种方法。 💝💝💝通过博文了解: 1💝💝💝-----安卓14去除…

批量规范化与ResNet-paddle

批量规范化与ResNet——paddle部分 本文部分为paddle框架以及部分理论分析,torch框架对应代码可见批量规范化与ResNet import paddle print("paddle version:",paddle.__version__)paddle version: 2.6.1批量规范化 批量规范化(Batch Norma…

从零开始快速构建Vue3项目

一、技术选型 组件大类 具体插件 vue3插件 相关插件开发文档 基础架构搭建 初始项目搭建、打包构件工具:vite开始 | Vite路由管理及菜单权限封装vue-router介绍 | Vue Router状态管理Pinia介绍 | Pinia 中文文档API请求及异常封装axiosUI框架 element-uihttps…

74HC245

74HC245:典型的CMOS型缓冲门电路 在这里用于增加电压

BFS 算法专题(三):BFS 解决边权为 1 的最短路问题

目录 1. 迷宫中离入口最近的出口 1.1 算法原理 1.2 算法代码 2. 最小基因变化 ★★★ 2.1 算法原理 2.2 算法代码 3. 单词接龙 3.1 算法原理 3.2 算法代码 4. 为高尔夫比赛砍树 (hard) 4.1 算法原理 4.2 算法代码 1. 迷宫中离入口最近的出口 . - 力扣(…

「数据要素」行业简报|2024.11.上刊

纵观数据要素行业动态,洞察行业风向,把握行业脉搏! 一、政策发布 1、《山东省公共数据资源登记管理工作规范(试行)》公开征求意见 11月7日,为认真贯彻落实《中共中央办公厅 国务院办公厅关于加快公共数据资源开发利用的意见》《…

有什么好用的 WebSocket 调试工具吗?

在开发和测试 WebSocket 应用程序时,确保客户端能够正确地与服务器建立连接、发送和接收消息是非常重要的。 市面上有许多通用的 API 测试工具,它们大多专注于 HTTP 请求,而对于 WebSocket 的支持则显得较为有限。这种局限性使得开发者在寻找…