【shell】

news2024/12/23 10:40:24

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

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

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

相关文章

人工智能_机器学习059_非线性核函数_poly核函数_rbf核函数_以及linear核函数效果对比---人工智能工作笔记0099

人工智能_机器学习059_非线性核函数介绍---人工智能工作笔记0099 那么我们应该如何调整这个SVC的参数,也就是我们应该使用哪种核函数,比较合适呢?这取决于我们的数据,适合使用哪个核函数,正好我们有 提供的score = accuracy_score(y_test,y_pred) 这样的评分函数,我们可以根据…

安装Python以及pycharm

Pycharm是编辑器。相当于Word对文字进行编辑。 Python是解释器。讲代码翻译为计算机可以理解的指令。 1、安装Python 官网&#xff1a;Welcome to Python.org 打开的时候有点慢等待一会就好&#xff0c;点击下载&#xff0c;选择Windows版本 等待一会&#xff0c;可以看到如…

全志T527设置gpio口输出高电平实际输出低电平

前言 在调试T527的时候&#xff0c;主板另外添加了gpio口去控制usb口的电源开关&#xff0c;软件上面需要在内核运行的时候将gpio口设置输出高电平&#xff0c;usb口才可以正常使用。改好系统固件后&#xff0c;升级发现&#xff0c;机器开机动画过程中可以控制gpio口去打开us…

怎么翻译英文医学文献资料

文献翻译是一项要求严谨、精确且地道的工作&#xff0c;对于医学文献翻译更是如此。那么&#xff0c;怎么翻译英文医学文献资料&#xff0c;医学英文文献翻译公司哪个好&#xff1f; 专业人士指出&#xff0c;在翻译医学文献时&#xff0c;理解原文的语境是至关重要的。这不仅需…

沐风老师3DMAX随机变换工具RandomTransform插件使用方法详解

3DMAX随机变换工具RandomTransform插件使用方法 3dMax随机变换工具RandomTransform&#xff0c;是一款用MAXScript脚本语言开发的3dsMax小工具&#xff0c;可以随机变换选中的单个或多个对象的位置、角度及大小。 在3dMax中“变换”工具是最常用的工具&#xff08;移动、旋转和…

配置multipath.conf后linux主机重启异常处理

有个db备库主机&#xff0c;操作系统是Oracle Linux Server release 8.8&#xff0c;因本地空间不足&#xff0c;通过fc挂接存储磁盘&#xff0c;配置/etc/multipath.conf后&#xff0c;重启主机验证&#xff0c;发现启动异常&#xff0c;入下图 # lsb_release -a LSB Version…

Python入门07循环及常见的数据结构

目录 1 循环的语法结构2 break和continue的示例3 可迭代对象4 列表5 元组6 列表和元组的应用场景7 集合8 字典9 生成器 1 循环的语法结构 在Python中&#xff0c;循环是一种控制结构&#xff0c;用于重复执行一段代码&#xff0c;直到满足特定条件。Python中有两种循环结构&am…

Ribbon-IRule 修改负载均衡的规则

1、负载均衡规则描述 &#xff08;1&#xff09;整体关系 &#xff08;2&#xff09;规则描述 内置负载均衡规则类规则描述RoundRobinRule简单轮询服务列表来选择服务器。它是Ribbon默认的负载均衡规则。AvailabilityFilteringRule对以下两种服务器进行忽略: (1)在默认情况下&…

阿里蹲完滴滴蹲,滴滴蹲完腾讯蹲,昨晚腾讯视频出现短暂技术故障

01 腾讯视频出现短暂技术问题。昨晚&#xff08;12月3日&#xff0c;周日&#xff09;&#xff0c;不少网友休息天都在观看影视节目&#xff0c;然而有网友突然发现腾讯视频出现网络故障。据网友反馈&#xff0c;具体问题&#xff1a;如首页无法加载内容、VIP用户看不了会员视频…

电力系统中的直流负载,你了解多少?

直流负载在电力系统中扮演着重要的角色&#xff0c;它是电力系统的重要组成部分&#xff0c;对于电力系统的稳定运行起着至关重要的作用。直流负载主要包括直流电动机、蓄电池、电解设备等。 首先&#xff0c;我们来了解一下直流负载的基本原理。直流负载是指能够将电能转化为其…

【STM32】TIM定时器输出比较

1 输出比较 1.1 输出比较简介 OC&#xff08;Output Compare&#xff09;输出比较&#xff1b;IC&#xff08;Input Capture&#xff09;输入捕获&#xff1b;CC&#xff08;Capture/Compare&#xff09;输入捕获和输出比较的单元输出比较可以通过比较CNT与CCR寄存器值&#…

Windows系统远程桌面本地Ubuntu虚拟机

应用概览 在Windows系统上&#xff0c;有时候我们虽然本地安装了Linux虚拟机系统&#xff0c;但是由于特殊原因导致虚拟机与主体机之间无法复制粘贴文本和文件&#xff0c;但是却有基本的联网功能&#xff0c;此时就可以用本方案解决&#xff0c;即&#xff1a;本地远程桌面方…

好大夫数据爬取

好大夫数据爬取 问诊数据评论数据医生数据科普号数据医患交流数据 可按照疾病进行所有医生的数据&#xff0c;也可以抓所有问诊数据、评论数据 突破限制&#xff0c;快速交付

解决:ERROR: No matching distribution found for rarfile

解决&#xff1a;ERROR: No matching distribution found for rarfile 文章目录 解决&#xff1a;ERROR: No matching distribution found for rarfile背景报错问题报错翻译报错位置代码报错原因解决方法今天的分享就到此结束了 背景 在使用之前的代码时&#xff0c;报错&#…

SSM项目实战-前端-将uid存放在pinia中

https://pinia.vuejs.org/zh/getting-started.html 1、安装pinia npm install pinia {"name": "pro20-schedule","private": true,"version": "0.0.0","type": "module","scripts": {"d…

如何从T-N曲线判断电机选对了没有

我的知乎原文&#xff1a;https://zhuanlan.zhihu.com/p/670156320? 如果你是一个刚入行的电机工程师&#xff0c;刚刚参加了一个新产品的开发&#xff0c;在众多电机供应商中让你去挑选一款合适的电机&#xff0c;该从哪个角度去入手呢&#xff1f; 今天这篇文章就从T-N曲线…

VM虚拟机的配置文件(.vmx)损坏修复

TOC 一、概述 在使用Vm虚拟机的时候&#xff0c;我的电脑蓝屏后导致.vmx打不开了&#xff0c;而且点击没有任何提示信息。应该是配置文件损坏了 二、环境 VM版本&#xff1a;VMware Workstation 16 Pro 16.2.1 build-18811642Windows版本&#xff1a;Windows 10 家庭版 三…

龙迅LT2611UX 四端口LVDS转HDMI(2.0)

1.描述&#xff1a; LT2611UX 四端口LVDS TO HDMI2.0。 LT2611UX是一款高性能得LVDS到HDMI2.0转换器得STB&#xff0c;DVD应用程序&#xff0c;LVDS输入可以配置单端口&#xff0c;双端口或者四端口&#xff0c;带有一个高速时钟通道&#xff0c;最多可运行三到四个高速数据…

Shopify二次开发之三:liquid语法学习(访问Objects和Schema数据模型)

目录 Objects &#xff08;对象&#xff09; 全局对象 all_products&#xff1a;商店中所有的商品 articles: 商店中的所有文章 collections&#xff1a;商店中所有的集合 模板对象 在product.json&#xff08;配置的section中) 访问product对象 在collection.json中可…

Spring Bean的生命周期各阶段详解附源码

目录 Bean的生命周期Bean定义阶段Bean实例化阶段Bean属性注入阶段Bean初始化阶段Bean销毁阶段 Bean的生命周期 bean的生命周期&#xff0c;我们都知道大致是分为&#xff1a;bean定义&#xff0c;bean的实例化&#xff0c;bean的属性注入&#xff0c;bean的初始化以及bean的销毁…