【shell】

shell

  • 一、shell简介
  • 二、shell脚本的执行方式
  • 三、shell变量
    • 3.1 shell变量介绍
    • 3.2 shell变量的定义
      • 3.1.1 基本语法
      • 3.2.2 定义变量的规则
      • 3.2.3 将命令的返回值赋予变量
  • 四、环境变量的设置
    • 4.1 基本语法:
  • 五、位置参数变量
    • 5.1 基本介绍
    • 5.2 基本语法
  • 六、预定义变量
    • 6.1 基本介绍
    • 6.2 基本语法
  • 七、运算符
  • 九、流程控制
    • 9.1 if 条件判断
    • 9.2 常用判断条件:
    • 9.3 case语句
    • 9.4 for循环
    • 9.5 while循环
    • 9.6 read读取控制台输入
      • 9.6.1 基本语法:read [选项] [参数]
      • 9.6.2 用法:
      • 9.6.3 参数说明:
      • 9.7.4 .参数解读实例:
        • 9.7.4.1 -a 参数
        • 9.7.4.2 -d
        • 9.7.4.3 -p
        • 9.7.4.4 -n
        • 9.7.4.5 -r
        • 9.7.4.6 -s
        • 9.7.4.7 -t
        • 9.7.4.8 -u
  • 十、shell函数
    • 10.1 系统函数
      • 10.1.1 basename函数
      • 10.1.2 dirname函数
    • 10.2 自定义函数
  • 十一、在 Shell 脚本中调用另一个 Shell 脚本的三种方式
    • 11.1 fork
    • 11.2 exec
    • 11.3 source
  • 十二、等待.sh脚本仅在另一个脚本完成后才能运行?
    • 12.1 &&连接器
    • 12.2 连接器

一、shell简介

shell是一个命令行解释器,它为用户提供了一个向linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell来启动、挂起、停止甚至是编写一些程序。

二、shell脚本的执行方式

1.脚本以#!/bin/bash开头
2.脚本需要有可执行权限

三、shell变量

3.1 shell变量介绍

1.Linux shell中的变量分为系统变量和用户自定义变量
2.系统变量: H O M E 、 HOME、 HOMEPWD、 S H E L L 、 SHELL、 SHELLUSER等
3.显示当前shell中的所有变量:set

3.2 shell变量的定义

3.1.1 基本语法

1.定义变量:变量=值
2.撤销变量:unset 变量
3.声明静态变量:readonly 变量(静态变量声明后不能撤销)
4.多行注释的写法::<<! txt !(开头和结尾都单独一行)

3.2.2 定义变量的规则

1.变量名称可以由字母、数字和下划线组成,但是不能以数字开头
2.等号两侧不能有空格.
3.变量名称一般习惯为大写.

3.2.3 将命令的返回值赋予变量

1.A=‘date’反引号,运行里面的命令,并把结果返回给变量A
2.A=$(date)等价于反引号

四、环境变量的设置

4.1 基本语法:

1.export 变量名=变量值(功能描述:将shell变量输出为环境变量/全局变量)
2.source 配置文件(功能描述:让修改后的配置信息立即生效)
3.echo $变量名(功能描述:查询环境变量的值)

五、位置参数变量

5.1 基本介绍

当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量。比如:./myshell.sh 100 200,这个就是一个执行shell的命令行,可以在myshell脚本中获取到参数信息。

5.2 基本语法

$n(功能描述:n为数字,$0代表命令本身,$1- 9 代表第一到第九个参数,十以上的参数需要用大括号包含,如 9代表第一到第九个参数,十以上的参数需要用大括号包含,如 9代表第一到第九个参数,十以上的参数需要用大括号包含,如{10})
∗ (功能描述:这个变量代表命令行中所有的参数, *(功能描述:这个变量代表命令行中所有的参数, (功能描述:这个变量代表命令行中所有的参数,*把所有的参数看成一个整体)
@ (功能描述:这个变量也代表命令行中所有的参数,不过 @(功能描述:这个变量也代表命令行中所有的参数,不过 @(功能描述:这个变量也代表命令行中所有的参数,不过@把每个参数区分对待)
$#(功能描述:这个变量代表命令行中所有的参数个数)

六、预定义变量

6.1 基本介绍

shell设计者事先已经定义好的变量,可以直接在shell脚本中使用。

6.2 基本语法

$$ (功能描述:当前进程的进程号(PID))
$!(功能描述:后台运行的最后一个进程的进程号(PID))
$? (功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)

七、运算符

基本语法:
1. ( ( 运算符 ) ) 或者 ((运算符))或者 ((运算符))或者[运算式]或者expr m + n
2.注意expr运算符间要有空格,如果希望将expr的结果赋给某个变量,使用反引号或者$
3.expr *,/,%分布代表乘,除,取余

九、流程控制

9.1 if 条件判断

基本语法:(注意condition前后要有空格)

if [ condition ]
then 语句
elif
then 语句
fi

9.2 常用判断条件:

字符串比较(=)
两个整数的比较
	-lt(小于)                    //less than   小于
	-le(小于等于)            // 
	-eq(等于)                  //equal  等于
	-gt(大于)                   //greater than 大于
	-ge(大于等于)          //
	-ne(不等于)              //
按照文件权限进行判断
	-r (有读的权限)
	-w (有写的权限)
	-x(有执行的权限)
按照文件类型进行判断
	-f (文件存在并且是一个常规文件)
	-e(文件存在)
	-d(文件存在并是一个目录)

9.3 case语句

case $变量名 in
"值1")
如果变量的值等于值1,则执行程序1
;;
"值2")
如果变量的值等于值2,则执行程序2
;;
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac

9.4 for循环

基本语法1for 变量 in 值123...
do
程序
done

基本语法2for((初始值;循环控制条件;变量变化))
do
程序
done

9.5 while循环

while [ 条件判断式 ]
do
程序
done

在这里插入图片描述

9.6 read读取控制台输入

9.6.1 基本语法:read [选项] [参数]

选项:

  • -p:指定读取值时的提示符
  • -t:指定读取值时等待的时间(秒),如果没有在指定的时间内输入,就不再等待。

9.6.2 用法:

  • 用于从标准输入读取数据(键盘)
  • 也可以从文件中读取(此时是读取一行文件)
    read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-p prompt] [-t timeout] [-u fd] [name…]

9.6.3 参数说明:

  • -a 后面跟一个变量,该变量会被认为为数组,然后给其复制,默认是以空格为分隔符
  • -d 后面跟一个标志符,其实只有其后的第一个字符有用,作为结束的标志
  • -p 后面跟提示信息,即在输入前面打印提示信息
  • -e 在输入的时候可以使用,命令补全功能
  • -n 后面跟一个数字,定义输入文本的长度,很实用
  • -r 屏蔽\,若没有该选项,则\作为一个转义字符,有的话反斜杠就是个正常的字符了。
  • -s 安静模式,在输入字符时不再屏幕上面显示(常用于输入密码)
  • -t 后面跟秒数,定义输入字符的等待时间
  • -u 后面跟fd,从文件描述符中读取,该文件描述符可以是exec新开启的

9.7.4 .参数解读实例:

9.7.4.1 -a 参数
  • 从键盘读取一组数据进行四则运算
    read -a score #读取三个元素进入score数组
    echo ${score[@]} #挨个输出score数组中的元素,不换行

  • 输出结果
    输入:11 12 13
    输出:11 12 13

9.7.4.2 -d
  • 限定读取到那一个字符停止读取,比如下面就是限定读取到字符s,只有第一个字符重要
    read -d sscsc v
    echo -e “\n”
    echo $v
9.7.4.3 -p
  • -p选项是为了显示提示信息
    read -p “请输入你的密码:” passward
    echo $passward

  • 结果
    $ bash 1.sh
    请输入你的密码:1234567
    1234567

9.7.4.4 -n
  • 定义输入密码的长度为8
    read -n8 -p “请输入你的密码:” passward #控制密码的
    echo -e “\n”
    echo -e $passward
  • 输出结果
    请输入你的密码:12345678
    12345678
9.7.4.5 -r
  • 读取一段字符串 123adda\ncsdd
    read -r -p “请输入字符串” str
    echo -e “\n”
    echo $str

  • 输出结果
    请输入字符串123adda\ncsdd

123adda\ncsdd

9.7.4.6 -s
  • 这个选项常和-p一起使用
    read -p “请输如你的密码:” -s -n8 passward
    echo -e “\n密码”
    echo $passward

  • 输出结果
    请输如你的密码:
    密码
    12345678

9.7.4.7 -t
  • 指定输入字符的等待时间就好像那些输入验证码的程序,输错了第次就要等待时间再次进行输入
9.7.4.8 -u
  • 创建两个文件1.txt,2.txt,然后拼接两个文件的第三行和第四行
    $ cat 1.xtxt
    a
    b
    c
    d
    $ cat 2.txt
    1
    2
    3
    4

while read -u2 i && read -u3 j
do
echo $i $j
done 2<1.txt 3<2.txt

  • 输出结果
    a 1
    b 2
    c 3
    d 4

十、shell函数

10.1 系统函数

10.1.1 basename函数

功能:返回完整路径最后/的部分,常用于获取文件名
基本语法:basename [pathname] [suffix](功能描述:basename命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来)。
选项:suffix为后缀,如果被指定,basename会将pathname中的suffix去掉。

10.1.2 dirname函数

功能:返回完整路径最后/前面的部分,常用于返回路径部分。
基本语法:dirname 文件绝对路径(功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分))

10.2 自定义函数

[ function ] funcname()
{
Action;
[return int;]
}

十一、在 Shell 脚本中调用另一个 Shell 脚本的三种方式

11.1 fork

fork 是最普通的, 就是直接在脚本里面用 path/to/foo.sh 来调用foo.sh 这个脚本,比如如果是 foo.sh 在当前目录下,就是 ./foo.sh。运行的时候 terminal 会新开一个子 Shell 执行脚本 foo.sh,子 Shell 执行的时候, 父 Shell 还在。子 Shell 执行完毕后返回父 Shell。 子 Shell 从父 Shell 继承环境变量,但是子 Shell 中的环境变量不会带回父 Shell。

11.2 exec

exec 与 fork 不同,不需要新开一个子 Shell 来执行被调用的脚本. 被调用的脚本与父脚本在同一个 Shell 内执行。但是使用 exec 调用一个新脚本以后, 父脚本中 exec 行之后的内容就不会再执行了。这是 exec 和 source 的区别.

11.3 source

与 fork 的区别是不新开一个子 Shell 来执行被调用的脚本,而是在同一个 Shell 中执行. 所以被调用的脚本中声明的变量和环境变量, 都可以在主脚本中进行获取和使用。

十二、等待.sh脚本仅在另一个脚本完成后才能运行?

12.1 &&连接器

只需使用&&连接器(即复合命令):
./script1.sh && ./script2.sh
1
但是请注意,只有script1.sh 即第一个脚本退出代码为0(即没有错误)时,才会执行第二个脚本。

12.2 连接器

如果要执行序列,无论第一个脚本的结果如何,只需执行以下操作
./script1.sh ; ./script2.sh

您可以测试两个连接器的行为:
$ true && echo aa
aa
$ false && echo aa
$ false ; echo aa
aa

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

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

相关文章

金蝶云星空表单插件单据体批量删除,序号自增

文章目录 金蝶云星空表单插件单据体批量删除&#xff0c;序号自增字段标识说明表单插件获取单据体数据包移除物料为空的行其他移除物料为空的行的方式&#xff0c;但是测试不通过&#xff0c;不建议使用序号重新生成测试 金蝶云星空表单插件单据体批量删除&#xff0c;序号自增…

新的 BLUFFS 攻击导致蓝牙连接不再私密

蓝牙是一种连接我们设备的低功耗无线技术&#xff0c;有一个新的漏洞需要解决。 中间的攻击者可以使用新的 BLUFFS 攻击轻松窥探您的通信。 法国研究中心 EURECOM 的研究员 Daniele Antonioli 演示了六种新颖的攻击&#xff0c;这些攻击被定义为 BLUFFS&#xff08;蓝牙转发和…

合并两个有序链表[简单]

优质博文&#xff1a;IT-BLOG-CN 一、题目 将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4] 示例 2&#xff1a; 输入&#…

java常用知识点记忆

类的继承与多态 类的继承不支持多重继承非private 方法才可以被覆盖覆盖的方法要求&#xff0c;子类中的方法的名字&#xff0c;参数列表&#xff0c;返回类型与父类相同方法的重载是在一个类中定义方法名字相同&#xff0c;但是参数列表不同的方法要是在子类中定义了与父类名字…

IDEA 下载mysql驱动下载在不下来

结合一下 https://www.cnblogs.com/dadian/p/11936056.htmlhttps://www.cnblogs.com/dadian/p/11936056.html并且下载的 在idea改名 加入 加入到库 等待一会就要你输入sql的root和密码了,就OK

深入理解强化学习——马尔可夫决策过程:蒙特卡洛方法-[基础知识]

分类目录&#xff1a;《深入理解强化学习》总目录 蒙特卡洛方法&#xff08;Monte-Carlo Methods&#xff09;也被称为统计模拟方法&#xff0c;是一种基于概率统计的数值计算方法。运用蒙特卡洛方法时&#xff0c;我们通常使用重复随机抽样&#xff0c;然后运用概率统计方法来…

整数的立方和

系列文章目录 进阶的卡莎C++_睡觉觉觉得的博客-CSDN博客数1的个数_睡觉觉觉得的博客-CSDN博客双精度浮点数的输入输出_睡觉觉觉得的博客-CSDN博客足球联赛积分_睡觉觉觉得的博客-CSDN博客大减价(一级)_睡觉觉觉得的博客-CSDN博客小写字母的判断_睡觉觉觉得的博客-CSDN博客纸币(…

在线直线度测量仪在圆形轧钢中的重要性

在线直线度测量仪在圆形轧钢中的重要性 在现代轧钢生产中&#xff0c;在线直线度测量仪是一种非常重要的工具&#xff0c;它可以帮助工人和产线进行高精度的直线度和直径测量&#xff0c;从而保证产品质量的稳定性和精度。以下是详细介绍直线度测量仪的重要性和应用。 一、测…

【Java基础】几种拼接字符串的方法

几种拼接字符串的方法 1.使用 "" 运算符拼接字符串2.使用 StringBuilder 或 StringBuffer 类3.使用 StringJoiner 类4.使用 String 类 join 方法5.使用 StringUtils 类6.使用 String 类 concat 方法7.使用 String.format() 方法格式化字符串8.使用 Stream 实现9.总结…

http代理如何设置手机上网?http代理起到了哪些作用

本文将详细介绍如何设置手机上网使用HTTP代理&#xff0c;以及HTTP代理所起到的作用。 一、HTTP代理是什么&#xff1f; HTTP代理是一种网络协议&#xff0c;它允许客户端与服务器之间进行数据传输。它是一种常用的代理服务&#xff0c;可以帮助用户通过HTTP协议访问被封锁的网…

蓝桥杯物联网竞赛_STM32L071_10_温度传感器扩展模块

原理图&#xff1a; 温度传感器原理图&#xff1a; 其中芯片可以通过SCL和SDA引脚通过I2C通信向温度传感器指定地址获取温度的模拟量 再利用公式将模拟量转换成相应温度即可 实验板接口原理图&#xff1a; 模拟量转相应温度公式&#xff1a; CubMx配置&#xff1a; Keil配置&…

手把手教你做基于stm32的红外、语音、按键智能灯光控制(上)

目录&#xff1a; 1.系统实现目标2.硬件选型和软件准备2.1. 硬件选型2.2 软件准备 3. 硬件IO表4.各个模块的驱动函数4.1. 红外遥控模块4.2. 按键模块4.3. LED灯4.4. BH1750光照度传感器4.5. 红外检测模块 1.系统实现目标 本文所设计的基于单片机的灯光控制系统主要由模式选择功…

Http和WebSocket

客户端发送一次http请求&#xff0c;服务器返回一次http响应。 问题&#xff1a;如何在客户端没有发送请求的情况下&#xff0c;返回服务端的响应&#xff0c;网页可以得服务器数据&#xff1f; 1&#xff1a;http定时轮询 客户端定时发送http请求&#xff0c;eg&#…

layui+ssm实现数据批量删除

layuissm实现数据的批量删除 //数据表格table.render({id: adminList,elem: #adminList,url: ctx "/admin/getAdminList", //数据接口cellMinWidth: 80,even: true,toolbar: #toolbarDemo,//头部工具栏limit: 10,//每页条数limits: [10, 20, 30, 40],defaultToolba…

Facebook推广工具功能科普!

随着社交媒体的普及&#xff0c;Facebook已经成为全球使用最广泛的社交平台之一&#xff0c;对于广大营销人员来说&#xff0c;利用Facebook推广工具进行营销已经成为不可或缺的一部分。 那么&#xff0c;这些推广工具到底有哪些功能呢?本文将为您揭秘Facebook推广工具的强大…

安全测试之推荐工具(一)

文章目录 一、前言二、Web安全&#xff08;一&#xff09;AppScan&#xff08;推荐&#xff09;&#xff08;二&#xff09;AWVS&#xff08;推荐&#xff09;&#xff08;三&#xff09;Burp Suite&#xff08;推荐&#xff09;&#xff08;四&#xff09;OWASP ZAP 三、主机安…

写 SVG 动画必看!SVG系列文章3-动画标签

1、SMIL animation概览 SMIL不是指「水蜜梨」&#xff0c;而是Synchronized Multimedia Integration Language&#xff08;同步多媒体集成语言&#xff09;的首字母缩写简称&#xff0c;是有标准的。本文所要介绍的SVG动画就是基于这种语言。 SMIL允许你做下面这些事情&#…

Harmony Ble蓝牙App(三)特性和属性

Ble蓝牙App&#xff08;三&#xff09;特性使用 前言正文一、获取属性列表二、属性提供者三、获取特性名称四、特性提供者五、加载特性六、源码 前言 在上一篇中我们完成了连接和发现服务两个动作&#xff0c;那么再发现服务之后要做什么呢&#xff1f;发现服务只是让你知道设备…

zxjy001-项目整体介绍

1、项目类型 全栈项目 前端&#xff1a;系统后台&#xff0c;系统前台后端&#xff1a;提供API接口 2、项目技术栈 前端 Vue,Element,Axios,NodeJs后端 Spring Boot,Spring Cloud,MybatisPlus,Spring Security,Redis,Maven,JWT,OAuth2其他技术 阿里云oss服务阿里云视频点播…

SL4010森利威尔DC3.7V升压5V、12V、24V/5A升压恒压电源芯片

SL4010是一款专用的DC-DC升压芯片&#xff0c;可以将3.7V的输入电压升压为5V、12V、24V的输出电压&#xff0c;并能够提供5A的输出电流。该芯片具有恒压输出、高效率、低发热等优点&#xff0c;广泛应用于各种需要高电压、大电流电源的应用中&#xff0c;如LED照明、电动汽车、…