(六)Shell 脚本应用(1):基础与环境变量详解

一、shell 脚本基础

  1. shell 的作用和特点

    • 作用:shell 接收用户的指令,翻译后提交给 CPU 执行。
    • 特点:工作在内核和用户之间,接收用户数据命令,提交给 CPU 判断执行,并反馈执行结果。在 Linux 系统中使用 bash 接收用户输入指令。
  2. shell 脚本的组成

    • 声明使用的解释器为 bash,如#!/bin/bash
    • 写注释信息,对脚本进行功能描述。
    • 提供脚本作者联系方式,以便在使用脚本时发现问题能方便联系作者。
    • 包含脚本执行命令,这些命令从上到下严格执行。
  3. 编写测试脚本和脚本执行方式

    • 编写测试脚本:使用命令[root@centos01 ~]# vim./ls.sh创建脚本,脚本内容如#!/bin/bash#Phone 1316195981#列出目录内容echo "查看所在目录:"cd /boot/pwdecho "显示文件内容:"ls -lh vml*
    • 脚本执行的方式
      • sh:不需要脚本添加执行权限,可直接执行。
      • source:进入脚本内部执行命令,不需要执行权限。
      • ./脚本名字:执行脚本需要脚本拥有执行权限。
  4. 脚本的管道符和重定向

    • 脚本的重定向方式
      • 标准输入:用数字 0 表示,从键盘接收输入的内容。
      • 标准输出:用数字 1 表示,键盘输入内容显示到显示器或者文件中。
      • 标准错误:用数字 2 表示,脚本执行的错误信息显示在屏幕上。
    • 重定向的操作符号
      • <:从指定文件读取数据。
      • >:重定向输出,后执行的会覆盖先执行的内容。
      • >>:重定向追加,不会覆盖数据。
      • 2>:标准错误输出。
      • 2>>:标准错误追加。
      • &>:正确或者错误全部接收。
    • 管道符:前一个命令执行的结果转交给后一个命令执行。
  5. 重定向和管道符的基本使用

    • 管道符号使用:例如[root@centos01 ~]# head -10 /etc/passwd | grep "bash$" | awk -F: '{print $1,$7}'
    • 重定向的使用
      • [root@centos01 ~]# echo "aaa" >./a.txt:重定向输出。
      • [root@centos01 ~]# echo "ccc" >>./a.txt:重定向追加输出。
      • [root@centos01 ~]# lsss 2>./error.log:错误输出。
      • [root@centos01 ~]# ls / &>./1.txt:混合输出。
      • [root@centos01 ~]# aaaa 2>>./1.txt:混合追加。

二、环境变量

  1. 变量的作用和类型

    • 作用:提高命令的复用率,减少代码量。
    • 类型
      • 自定义变量:由用户创建。
      • 环境变量:安装系统时创建设置运行环境。
      • 位置变量:在脚本传递参数时使用。
      • 预定义变量:用户无法删除和修改。
  2. 自定义变量的使用

    • 定义变量的类型
      • 局部环境变量:只能在当前 bash 环境使用。
      • 全局环境变量:在任何 bash 环境中都能使用。
    • 变量存储空间:默认保存在内存中。
    • 定义环境变量注意事项:可以大写字母开始,中间下划线,结束小写字母;不能以符号开始。
    • 定义一个局部环境变量:使用命令[root@centos01 ~]# a=1定义变量名字为 a 赋值为 1,然后使用[root@centos01 ~]# echo $a调用变量名字 a。
    • 定义一个全局环境变量:使用命令[root@centos01 ~]# export b=2定义全局环境变量 b 赋值 2,然后使用[root@centos01 ~]# echo $b调用全局环境变量名字 b。
  3. 变量赋值的使用

    • 变量赋值的方式
      • 双引号:允许引用环境变量。
      • 单引号:禁止引用环境变量。
      • 反撇:将命令执行结果赋值给变量。
      • read -p:接收用户输入的内容赋值给变量。
    • 双引号的使用:使用命令[root@centos01 ~]# a=benet定义环境变量 1,[root@centos01 ~]# b=6.0定义环境变量 2,然后[root@centos01 ~]# benet="$a $b"调用环境变量 1 和 2 赋值给变量名字 benet,最后使用[root@centos01 ~]# echo $benet显示变量值。
    • 单引号的使用:使用命令[root@centos01 ~]# accp='$a $b',不允许引用变量,当成普通字符串显示,然后使用[root@centos01 ~]# echo $accp显示变量值。
    • 命令执行结果赋值给变量:使用命令[root@centos01 ~]# head=head -10 /etc/passwd | grep "bash$" | awk -F: '{print $1,$7}',将命令执行结果赋值给变量 head,然后使用[root@centos01 ~]# echo $head` 显示变量值。
    • read -p接收用户输入内容:使用命令[root@centos01 ~]# read -p "请输入你的名字:" name接收用户输入的内容赋值给变量 name,然后使用[root@centos01 ~]# echo $name显示变量值。
  4. 整数运算

    • 运算符:+(加)、-(减)、*(乘)、/(除)、%(求余)。
    • 整数运算:使用命令[root@centos01 ~]# a=20[root@centos01 ~]# b=10定义变量,然后使用[root@centos01 ~]# expr $a + $b(相加)、[root@centos01 ~]# expr $a \* $b(相乘)、[root@centos01 ~]# expr $a / $b(相除)、[root@centos01 ~]# expr $a % $b(取余)进行整数运算。
  5. 环境变量

    • 系统环境变量存储位置
      • /etc/profile:任意用户都可以使用。
      • ~/.bash_profile:只能当前用户使用。
    • 常见的环境变量
      • echo $PWD:查看所在位置。
      • echo $HOME:查看宿主目录。
      • echo $USER:当前登录系统用户。
      • echo $SHELL:使用命令解释器。
      • echo $PATH:命令所在位置。
  6. 位置变量

    • 位置变量使用注意事项:只能传递九个位置变量。
    • 使用位置变量:创建脚本[root@centos01 ~]# vim./sum.sh,内容为#!/bin/bashsum=expr $1 + $2 + $3echo "$1 + $2 + $3 = $sum",然后使用命令[root@centos01 ~]# sh./sum.sh 10 20 30` 向脚本传递三个参数。
  7. 预定义变量

    • 预定义变量类型
      • $#:统计预定义变量个数。
      • $*:位置变量内容。
      • $?:脚本执行状态,0 表示成功,非 0 表示错误。
      • $0:显示脚本名字。
    • 预定义变量使用:创建脚本[root@centos01 ~]# vim./sum.sh,内容为#!/bin/bashsum=expr $1 + $2 + $3echo "$1 + $2 + $3 = $sum"echo "脚本名字、统计变量个数#"echo "位置变量$*"echo "脚本执行状态 $?",然后使用命令[root@centos01 ~]# sh./sum.sh 40 50 60执行脚本。

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

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

相关文章

Pikachu-Sql Inject-insert/update/delete注入

insert 注入 插入语句 insert into tables values(value1,value2,value3); 如&#xff1a;插入用户表 insert into users (id,name,password) values (id,username,password); 当点击注册 先判断是否有SQL注入漏洞&#xff0c;经过判断之后发现存在SQL漏洞。构造insert的pa…

Redis 篇-深入了解在 Linux 的 Redis 网络模型结构及其流程(阻塞 IO、非阻塞 IO、IO 多路复用、异步 IO、信号驱动 IO)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 用户空间与内核空间概述 2.0 Redis 网络模型 2.1 Redis 网络模型 - 阻塞 IO 2.2 Redis 网络模型 - 非阻塞 IO 2.3 Redis 网络模型 - IO 多路复用 2.3.1 IO 多路复…

【mmengine】配置器(config)(入门)读取与使用

一、 介绍 MMEngine 实现了抽象的配置类&#xff08;Config&#xff09;&#xff0c;为用户提供统一的配置访问接口。 配置类能够支持不同格式的配置文件&#xff0c;包括 python&#xff0c;json&#xff0c;yaml&#xff0c;用户可以根据需求选择自己偏好的格式。 配置类提供…

【网路通信基础与实践番外二】TCP协议的流量控制和拥塞控制以及二者区别和例题

TCP协议是端对端的协议&#xff0c;因此在数据进行传输的过程受发送方&#xff0c;数据通道&#xff0c;接收方三方状态的影响。我们用水龙头来比喻数据发送方&#xff0c;水管来比喻数据通道&#xff0c;水桶来表示数据接收方。 图(a)表示水桶太小&#xff0c;来不及接受注入…

Unity实战案例全解析:RTS游戏的框选和阵型功能(3)生成范围检测框 +重置框选操作

前篇&#xff1a;Unity实战案例全解析&#xff1a;RTS游戏的框选和阵型功能&#xff08;2&#xff09; 生成选择框-CSDN博客 本案例来源于unity唐老狮&#xff0c;有兴趣的小伙伴可以去泰克在线观看该课程 我只是对重要功能进行分析和做出笔记分享&#xff0c;并未无师自通&…

给出向量求叉乘(在垂直的时候可以简化)

1、可以用那个求行列式的方法求叉乘。 2、在两个向量垂直的时候&#xff0c;可以用简化方法&#xff0c;前面幅度相乘&#xff0c;然后ex叉乘ey是ez 注意叉乘结果无论原向量是不是垂直&#xff0c;叉乘结果都与两个向量垂直

深入探秘 Java 网络编程:从基础到多线程服务器的全方位指南

我的主页&#xff1a;2的n次方_ Java 作为一门功能强大的编程语言&#xff0c;不仅在桌面应用、移动开发、后端开发等领域表现出色&#xff0c;还在网络编程中拥有广泛的应用。网络编程涉及在两个或多个设备之间通过网络进行通信&#xff0c;这对于构建分布式系统、客户端…

【Linux】进程管理:状态与优先级调度的深度分析

✨ 山海自有归期&#xff0c;风雨自有相逢 &#x1f30f; &#x1f4c3;个人主页&#xff1a;island1314 &#x1f525;个人专栏&#xff1a;Linux—登神长阶 ⛺️ 欢迎关注&#xff1a;&#x1f44d;点赞 &#x1…

spring揭秘25-springmvc03-其他组件(文件上传+拦截器+处理器适配器+异常统一处理)

文章目录 【README】【1】文件上传与MultipartResolver【1.1】使用MultipartResolver进行文件上传【1.2】springmvc处理multipart多部件请求流程【1.3】使用springmvc上传文件代码实现&#xff08;springmvc6.10版本&#xff09;&#xff1a; 【2】Handler与HandlerAdaptor&…

stm32单片机学习 - MDK仿真调试

1 进行环境配置 点击 Options for Target&#xff0c;也就是我们俗称的魔法棒。 将"C/C"中的Optimization选项选为Level 0(-O0) 作用:优化等级调为0级,便于调试时分析代码 勾选"Debug"中的Load Application at Starup 和 Run to main() 选项 作用:Load…

Emergency Stop (ES)

文章目录 1. 介绍2. Feature List3. 紧急停止信号触发方式3.1 Port触发紧急停止信号3.2 SMU事件触发紧急停止信号3.3 软件触发紧急停止信号 4. 应用场景4.1 Port4.2 MSC 1. 介绍 Emergency Stop (ES)是Ifx System Control Units (SCU)六大模块之一。详细信息可以参考Infineon-…

latex有哪些颜色中文叫什么,Python绘制出来

latex有哪些颜色中文叫什么&#xff0c;Python绘制出来 为了展示xcolor包预定义的颜色及其对应的中文名称&#xff0c;并使用Python打印出来&#xff0c;我们可以先列出常见的预定义颜色名称&#xff0c;然后将它们翻译成中文&#xff0c;并最后用Python打印出来。 步骤 列出…

移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——13.mapset(模拟实现)

1.对红黑树进行改造 1.1treenode模板参数改变 之前构建treenode模板参数传的是class k,class v(set为k&#xff0c;k&#xff1b;map是k&#xff0c;v&#xff09;&#xff0c;现在直接用T代替 template<class T> //这里直接传了T作为模板参数&#xff0c;T可能是pai…

19.第二阶段x86游戏实战2-寻找寻路call

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 本人写的内容纯属胡编乱造&#xff0c;全都是合成造假&#xff0c;仅仅只是为了娱乐&#xff0c;请不要…

什么是reactor以及其三种版本

写在前面 本文来看下什么是reactor以及其三种版本。 1&#xff1a;什么是reactor以及其三种版本 为了更好的理解什么是reactor&#xff0c;我们结合现实生活中的例子来看下。 翠花是个貌美如花的姑娘&#xff0c;人称赛东施&#xff0c;她的梦想是嫁给王子&#xff0c;可是天…

hystrix微服务部署

目录 一.启动nacos和redis 1.查看是否有nacos和redis 二.开始项目 1.hystrix1工程&#xff08;修改一下工程的注册名字&#xff09; 2.运行登录nacos网站查看运行效果&#xff08;默认密码nacos,nacos&#xff09; 3.开启第二个项目 hystrix2工程 4.关闭第二个项目 hyst…

SpringBoot学习笔记(2)

1.静态文件访问 使用IDEA创建Spring Boot项目&#xff0c;会默认创建出classpath:/static/目录&#xff0c;静态资源一般放在这个目录下即可。 如果默认的静态资源过滤策略不能满足开发需求&#xff0c;也可以自定义静态资源过滤策略。 1.1直接访问 在application.properties中…

Coze:如何使用主页对话框?

你好&#xff0c;我是三桥君 我们今天要介绍的功能模块是“主页对话框”。 目录 访问官网 登录首页 基本功能 主页对话框 第一个功能&#xff1a;如何与自己收藏的机器人进行对话&#xff1f; 第二个功能&#xff1a;如何请求主页对话框的机器人帮助创建一个新的机器人&#x…

【北京迅为】《STM32MP157开发板嵌入式开发指南》- 第十八章 Linux编写第一个自己的命令

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7单核cortex-M4异构处理器&#xff0c;既可用Linux、又可以用于STM32单片机开发。开发板采用核心板底板结构&#xff0c;主频650M、1G内存、8G存储&#xff0c;核心板采用工业级板对板连接器&#xff0c;高可靠&#xff0c;牢固耐…

【算法系列-数组】螺旋矩阵(模拟)

【算法系列-数组】螺旋矩阵(模拟) 文章目录 【算法系列-数组】螺旋矩阵(模拟)1. 螺旋矩阵II(LeetCode 59)1.1 思路分析&#x1f3af;1.2 解题过程&#x1f3ac;1.3 代码示例&#x1f330; 2. 螺旋矩阵(LeetCode 54)2.1 思路分析&#x1f3af;2.2 解题过程&#x1f3ac;2.3 代码…