Shell编程入门学习

2023-05-16

文章目录

      • Shell编程
        • Shell脚本的执行方式
        • Shell的变量
          • Shell的变量的介绍
          • shell变量的定义
        • 设置环境变量
        • 位置参数变量
          • 介绍
          • 基本语法
        • 预定义变量
          • 基本介绍
          • 基本语法
        • 运算符
          • 基本语法
        • 条件判断
          • 判断语句
          • 常用判断条件
        • 流程控制
          • if 判断
          • case语句
          • for循环
          • while循环
        • read读取控制台输入
          • 基本语法
        • 函数
          • 函数介绍
          • 系统函数
          • 自定义函数

Shell编程

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

在这里插入图片描述

Shell脚本的执行方式

脚本格式要求

  1. 脚本以#!/bin/bash开头

  2. 脚本需要有可执行权限

在这里插入图片描述

脚本的常用执行方式

方式1(输入脚本的绝对路径或相对路径)

1)首先要赋予helloworld.sh 脚本的+x权限

2)执行脚本

在这里插入图片描述

在这里插入图片描述

方式2(sh+脚本)

说明:不用赋予脚本+x权限,直接执行即可。
在这里插入图片描述

Shell的变量

Shell的变量的介绍

1)Linux Shell中的变量分为,系统变量和用户自定义变量。

2)系统变量: H O M E 、 HOME、 HOMEPWD、 S H E L L 、 SHELL、 SHELLUSER等等 比如: echo $HOME 等等…

3)显示当前shell中所有变量:set

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

shell变量的定义

基本语法

1)定义变量:变量=值

2)撤销变量:unset 变量

  1. 声明静态变量:readonly变量,注意:不能unset
    在这里插入图片描述

在这里插入图片描述


在这里插入图片描述

在这里插入图片描述

定义变量的规则

  1. 变量名称可以由字母、数字和下划线组成,但是不能以数字开头。

  2. 等号两侧不能有空格

  3. 变量名称一般习惯为大写

将命令的返回值赋给变量

1)A=ls -la 反引号,运行里面的命令,并把结果返回给变量A

2)A=$(ls -la) 等价于反引号

在这里插入图片描述

在这里插入图片描述


在这里插入图片描述

在这里插入图片描述

设置环境变量

基本语法

  1. export 变量名=变量值 (功能描述:将shell变量输出为环境变量)

  2. source 配置文件 (功能描述:让修改后的配置信息立即生效)

  3. echo $变量名 (功能描述:查询环境变量的值)

位置参数变量

介绍

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

基本语法

$n (功能描述:n为数字,$0代表命令本身,$1- 9 代 表 第 一 到 第 九 个 参 数 , 十 以 上 的 参 数 , 十 以 上 的 参 数 需 要 用 大 括 号 包 含 , 如 9代表第一到第九个参数,十以上的参数,十以上的参 数需要用大括号包含,如 9{10})

∗ ( 功 能 描 述 : 这 个 变 量 代 表 命 令 行 中 所 有 的 参 数 , ∗ ∗ * (功能描述:这个变量代表命令行中所有的参数,** 把所有的参数看成一个整体*)

@ ( 功 能 描 述 : 这 个 变 量 也 代 表 命 令 行 中 所 有 的 参 数 , 不 过 ∗ ∗ @(功能描述:这个变量也代表命令行中所有的参数,不过** @@把每个参数**区分对待)

$#(功能描述:这个变量代表命令行中所有参数的个数)

在这里插入图片描述

在这里插入图片描述

预定义变量

基本介绍

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

基本语法

$$ (功能描述:当前进程的进程号(PID))

$! (功能描述:后台运行的最后一个进程的进程号(PID))

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

在这里插入图片描述

在这里插入图片描述

运算符

基本语法
  1. ( ( 运 算 式 ) ) ” 或 “ ∗ ∗ ((运算式))”或“** (())[运算式]**”

  2. expr m + n 注意expr运算符间要有空格

  3. expr m - n

  4. expr *, /, % 乘,除,取余
    在这里插入图片描述

在这里插入图片描述


推荐这种:

在这里插入图片描述

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述

在这里插入图片描述

条件判断

判断语句

基本语法

[ condition ](注意condition前后要有空格)

#非空返回true,可使用$?验证(0为true,>1为false)

应用实例

[ atguigu ] 返回true

[] 返回false

[condition] && echo OK || echo notok 条件满足,执行后面的语句

在这里插入图片描述

在这里插入图片描述

常用判断条件
  1. 两个整数的比较

= 字符串比较 -

lt 小于

-le 小于等于 -

eq 等于

-gt 大于

-ge 大于等于

-ne 不等于

  1. 按照文件权限进行判断

-r 有读的权限

-w 有写的权限

-x 有执行的权限

3)按照文件类型进行判断

-f 文件存在并且是一个常规的文件

-e 文件存在

-d 文件存在并是一个目录
在这里插入图片描述

在这里插入图片描述


在这里插入图片描述

在这里插入图片描述

流程控制

if 判断

基本语法

if [ 条件判断式 ];then

程序

fi

或者 if [ 条件判断式 ]

then 程序

elif [条件判断式]

then 程序

fi

注意事项:(1)[ 条件判断式 ],中括号和条件判断式之间必须有空格(2) 推荐使用第二种方式

应用实例

案例:请编写一个shell程序,如果输入的参数,大于等于60,则输出 “及格了”,如果小于 60,则输出 “不及格”


在这里插入图片描述
在这里插入图片描述

case语句

基本语法

case $变量名 in

“值1”)

如果变量的值等于值1,则执行程序1

;; “值2”)

如果变量的值等于值2,则执行程序2

;;

…省略其他分支…

*)

如果变量的值都不是以上的值,则执行此程序

;;

esac

应用实例

案例1 :当命令行参数是 1 时,输出 “周一”, 是2 时,就输出"周二", 其它情况输出 “other”
在这里插入图片描述

在这里插入图片描述

for循环

基本语法1

for 变量in 值1 值2 值3…

do

​ 程序

done

• 应用实例

案例1 :打印命令行输入的参数

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述

在这里插入图片描述


基本语法2

for (( 初始值;循环控制条件;变量变化))

do

程序

done •

应用实例

案例1 :从1加到100的值输出显示 [这里可以看出$* 和 $@ 的区别]


在这里插入图片描述

在这里插入图片描述

while循环

基本语法1

while [ 条件判断式 ]

do

​ 程序

done

应用实例

案例1 :从命令行输入一个数n,统计从 1+…+ n 的值是多少?


在这里插入图片描述

在这里插入图片描述

read读取控制台输入

基本语法

read(选项)(参数)

选项:

-p:指定读取值时的提示符;

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

参数

变量:指定读取值的变量名

应用实例

案例1:读取控制台输入一个num值

案例2:读取控制台输入一个num值,在10秒内输入。


在这里插入图片描述

在这里插入图片描述

函数

函数介绍

shell编程和其它编程语言一样,有系统函数,也可以自定义函数。系统函数中, 我们这里就介绍两个。

系统函数

basename基本语法

功能:返回完整路径最后/ 的部分常用于获取文件名 basename [pathname] [suffix]

basename [string] [suffix] (功能描述:basename命令会删掉所有的前缀包括最后一个(‘/’) 字符,然后将字符串显示出来。

选项: suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉

应用实例

案例1:请返回 /home/aaa/test.txt 的 “test.txt” 部分

在这里插入图片描述

dirname基本语法

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

案例1:请返回 /home/aaa/test.txt 的 /home/aaa

在这里插入图片描述

自定义函数

基本语法 [ function ] funname[()]

{

​ Action;

​ [return int;]

}

调用直接写函数名:funname [值]

• 应用实例

案例1:计算输入两个参数的和, getSum

在这里插入图片描述

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Shell编程入门学习 的相关文章

  • text to image(四):《Stackgan》

    继续介绍文本生成图像的相关工作 xff0c 本文给出的是2016年12月10日发表于 arXiv 的文章 Stackgan Text to photo realistic image synthesis with stacked gener
  • text to image(六):《AttnGAN》

    继续介绍文本生成图像的工作 xff0c 本文给出的是CVPR 2018 的文章 AttnGAN Fine Grained Text to Image Generation with Attentional Generative Advers
  • image caption笔记(二):《Show and Tell : A Neural Image Caption Generator》

    一 基本思想 CNN 43 RNN CNN用的是VGG16 RNN部分用的是LSTM 换成resnet101效果会更好 二 模型结构 四 代码分析 xff1a 首先是训练的部分 xff08 1 xff09 准备数据 COCO数据集中的cap
  • L1惩罚项和L2惩罚项

    x即为参数 L2正则化参数 从公式5可以看到 xff0c 越大 xff0c j j衰减得越快 另一个理解可以参考图2 xff0c 越大 xff0c L2圆的半径越小 xff0c 最后求得代价函数最值时各参数也会变得很小
  • COCO数据集介绍

    转载自 xff1a https zhuanlan zhihu com p 29393415 COCO的 全称是Common Objects in COntext xff0c 是微软团队提供的一个可以用来进行图像识别的数据集 MS COCO数
  • image caption笔记(九):《Unsupervised Image Captioning》

    无监督的caption 文章使用一个图像数据集 xff08 MSCOCO xff09 和一个文本语料库 xff08 从Web上抓取的200多万个句子组成图像描述语料库 xff09 来做无监督caption 没有任何配对集合 1 模型结构 x
  • PyTorch中使用指定的GPU

    转载自 http www cnblogs com darkknightzh p 6836568 html PyTorch默认使用从0开始的GPU xff0c 如果GPU0正在运行程序 xff0c 需要指定其他GPU 有如下两种方法来指定需要
  • 七大主流排序算法时间效率比较(基于C语言)

    这段时间在温故一些常见的排序算法 xff0c 顺手便把常见的一些比较著名的排序算法对同一个目标样本做了个比较 样本存于文件中 xff0c 可以根据需要进行替换 我调试的数据量较小 xff0c 发现简单算法 xff08 冒泡 xff0c 选择
  • image caption笔记(十):一些实现过程中的小细节

    1 beam search 一方面可以提升指标 xff0c 另一方面也可以解决生成的句子不通顺的问题 因此 xff0c 不管是在训练测试的过程中都要开beamsearch xff0c 对提高指标有帮助 还有就是 xff0c 如果训练的时候
  • C# 多进程之间的通讯方式

    前言 C 中可能大多数人针对于多线程之间的通讯 xff0c 是熟能生巧 xff0c 对于AsyncLocal 和ThreadLocal以及各个静态类中支持线程之间传递的GetData和SetData方法都是信手拈来 xff0c 那多进程通讯
  • setInterval()之坑

    首先看下面这个例子 xff1a lt DOCTYPE html gt lt html lang 61 34 en 34 gt lt head gt lt meta charset 61 34 UTF 8 34 gt lt title gt
  • window.open()session丢失问题解决方法

    最近要实现两个项目间的跳转 xff0c 避免二次登录 xff0c 出现了window open session丢失问题 xff0c 说下解决方法 一开始是这样写的 A项目调用B的登录请求 xff0c 返回成功 xff0c 即跳到B项目相应页
  • Java解析XML和json几个小例子

    一 DOM4J解析xml 案例1 xff1a 解析如下xml lt xml version 61 34 1 0 34 encoding 61 34 UTF 8 34 gt lt employee gt lt name gt 张三 lt na
  • Struts2拦截器简单实例

    利用拦截器实现权限控制 用户 admin 有全部的访问访问权限 用户 zhangsan有 a jsp b jsp的 访问权限 用户 lisi有 a jsp c jsp的 访问权限 如果用户没有访问权限 页面统一跳转到 permissionD
  • http请求循环调用返回数据抓取不全解决

    最近碰到一个问题 xff0c 就是频繁调用http请求 xff0c 返回的数据出现缺失的情况 特此记录下解决过程 先上代码 普通的get调用方法 public String sendGet String urlStr throws Inte
  • shiro 报错

    最近 xff0c 在学shiro的碰到如下报错 xff1a 登录认证失败 xff01 xff01 xff01 org apache shiro authc AuthenticationException Authentication fai
  • Oracle修改用户密码引发的问题

    前几天通过plsql登录数据库时 xff0c 提示密码过期 xff0c 需要修改密码 xff0c 那就修改呗 改完过了会 xff0c 再登录 xff0c 发现用户被锁了 那就去解锁下吧 一 登录数据库服务器 su oracle sqlplu
  • 《计算机程序的构造和解释》学习笔记——过程抽象

    这篇博文里说到程序 61 数据 43 过程 xff0c 数据分为不同类型 xff0c 每种类型有不同的操作过程 例如 xff0c 两个指针变量相加是无意义的 xff0c 所以对指针类型来说加法操作是 不允许 的 在汇编层 xff0c 每一个
  • c语言初阶-数组

    今天我们来认识一下数组和操作符吧 目录 1 数组 1 1数组的概念 1 2数组的定义 1 3数组的下标访问 1 数组 1 1数组的概念 所谓数组 xff08 array xff09 xff0c 就是具有相同数据类型的集合 xff0c 存放的
  • OkHttp-ConnectInterceptor源码解析

    ConnectInterceptor源码解析 本文基于okhttp3 10 0 1 概述 ConnectInterceptor主要是用于建立连接 xff0c 并再连接成功后将流封装成对象传递给下一个拦截器CallServerIntercep

随机推荐

  • 第六章 信号量集

    第六章 信号量集 6 1 信号量集的结构 6 1 1 基本概念 信号量集 xff1a 信号量集实质上就是一个多输入 多输出的组合逻辑 xff0c 输入为其他任务发出的多个信号 xff0c 输出为这多个输入逻辑运算的结果 6 1 2 信号量集
  • 嵌入式软件工程师岗位需求

    嵌入式软件工程师岗位需求 A 嵌入式软件开发工程师岗位职责 a 负责嵌入式操作系统的移植和应用开发 xff1b b 负责移动互联网的应用开发 xff1b c 负责嵌入式系统图形界面的开发 xff1b d 负责系统及软件设计文档的编写 xff
  • Marlink通信协议简介

    http qgroundcontrol org mavlink start mavlink协议介绍 https pixhawk ethz ch mavlink 消息简介 MAVLink简介 Mavlink协议最早由 苏黎世联邦理工学院 计算
  • List、Stack、Queue、Set和Map定义和常用方法

    集合 Java容器类库中的两种主要类型 1 每个槽只保存一个元素 Collection xff1a 描述所有序列容器的共性的根接口 xff1b List xff1a 以特定的顺序保存一组元素 xff1b Set xff1a 元素不能重复 x
  • MDK移植freeRTOS及多任务创建

    MDK移植freeRTOS及多任务创建 一 移植前准备二 freeRTOS移植三 创建任务 本文所使用的硬件为野火的指南者开发板 xff0c 购买后 xff0c 商家会提供已经移植好freeRTOS的工程可以直接使用进行开发 但如果没有现成
  • ubuntu如何进入修复模式,单用户模式,在进入系统前调出root用户的终端进行修复

    在进入Ubuntu界面前选择 Advanced options for Ubuntu 这一项进入 进入后在当前界面选择 recovery mode 这一项进入 进入后在当前界面选择 root 这一项进入 此时会在底部出现这样的画面 xff0
  • Semaphore的注意点

    seamphore大家玩的都比较多 xff0c 使用起来也很简单 xff0c 获取令牌和释放 xff0c 但是其中坑却不少 xff0c 而且会让人很难发现 xff0c 希望能通俗易懂的小例子讲明白其中的几个道理 一 线程都被阻塞了 xff1
  • tinymix的命令格式

    come from https blog csdn net jinchengzhou article details 82796888 最近在调试安卓系统的alsa驱动 xff0c 一开始搞不清楚tinymix要怎么用 xff0c 今天终于
  • Ubuntu Core 20新系统介绍

    Ubuntu Core 20是一个轻量 xff0c 容器化 xff0c 基于Ubuntu 20 04 LTS且为物联网设备和嵌入式系统所打造的版本 xff0c 现在已经普遍可用 新版本内建的安全更新严格限制策略使创新者能够开发高安全的产品和
  • python库Argparse中的可选参数设置 action=‘store_true‘ 的用法

    store true 是指带触发action时为真 xff0c 不触发则为假 通俗讲是指运行程序是否带参数 看例子就明白了 一 没有default import argparse parser 61 argparse ArgumentPar
  • 小熊派鸿蒙开发板环境搭建过程(HarmonyOS BearPi-HM Nano)

    小熊派鸿蒙开发板环境搭建过程 实验环境 xff1a 小熊派开发板 xff0c 基于Hi3861V100海思芯片Win10系统Oracle VM VirtualBox虚拟机Ubuntu系统安装包官方提供环境教程 xff08 基本按照这个步骤来
  • ubuntu安装新版本的clang-format 9

    ubuntu安装新版本的clang format 默认可能是clang format 6 0 旧版本的某些配置比如AlignConsecutiveMacros不支持 sudo apt get update sudo apt get inst
  • Android 视频 YUV i420格式转换为位图Bitmap

    Android 视频 YUV i420格式转换为位图Bitmap YUV基础描述 YUV YCbCr xff0c 图像除了RGB xff0c 还有YUV 定义 xff1a 是电视系统所采用的一种颜色编码方法 Y 标识明亮度 xff0c 也就
  • 谷粒学院——第二章、项目搭建

    一 创建父工程 1 创建sprigboot工程guli parent 在idea开发工具中 xff0c 使用 Spring Initializr 快速初始化一个 Spring Boot 模块 xff0c 版本使用 xff1a 2 2 1 R
  • 欧美网站风格特点

    评论一 xff1a 1 简洁 xff0c 平淡 xff0c 严谨 xff08 不习惯艳丽 xff0c 花销的色彩 xff09 2 倾向于将首页做成各类功能 板块的引导界面 xff0c 首页不会放置太多的内容 xff0c 即使有内容表现 xf
  • 2012年展望

    由于各种原因 xff0c 客观的 主观的 不过归根结底还是主观的多一些 xff0c 2011年整体过的很颓废 xff0c 上班大多在上网 xff0c 工作上几乎没有一点成绩 xff0c 自己也是很不满意 2012年世界末日都快来了 xff0
  • Ubuntu允许root远程登陆方法

    Ubuntu中允许root用户远程登录 编辑配置文件 xff1a sudo vim etc ssh sshd config 将PermitRootLogin prohibit password更改为 xff1a PermitRootLogi
  • 航模的遥控与电调

    遥控接收机解码出遥控器的信号 xff0c 有多少路的解多少路 xff0c 解出来的其实就是pwm的脉冲信号 xff0c T 61 20ms 脉宽是1 2ms xff0c 脉宽1ms时表示最小值 xff0c 脉宽2m时表示最大值 xff08
  • Flash某些错误解决

    运行是提示VerifyError 1014 无法找到类 修改文件后 xff0c 加载的总是旧文件 xff1f 清理IE缓存试试
  • Shell编程入门学习

    文章目录 Shell编程Shell脚本的执行方式Shell的变量Shell的变量的介绍shell变量的定义 设置环境变量位置参数变量介绍基本语法 预定义变量基本介绍基本语法 运算符基本语法 条件判断判断语句常用判断条件 流程控制if 判断c