shell 编程(三)

条件测试命令        

        条件测试:判断某需求是否满足,需要有测试机制来实现 专用的测试表达式需要由测试命令辅助完成测试过程,评估布尔生命,以便用在条件性执行中

        若真,则状态码变量$? 返回0     //  echo $? 打印0

        反之返回1

        test EXPRESSIOIN

        [ EXPRESSION ]

        [[ EXPRESSION ]]

        注:EXPRESSION前后必须有空白字符

help test 查看test命令具体用法

变量测试

-v VAR     变量VAR 是否设置

示例: 判断NAME变量是否定义

[ -v NAME ] // 注意括号  [] 和test 是等价

test -v NAME 

echo $? 0 定义  1未定义

数值测试

-gt 是否大于

-ge 是否大于等于

-eq 是否等于

-ne 是否不等于

-lt 是否小于

-le 是否小于等于

 示例: 如果使用变量必须要加$

qgy@qgy-VMware-Virtual-Platform:~$ test 10 -gt 8 
qgy@qgy-VMware-Virtual-Platform:~$ echo $?
0
qgy@qgy-VMware-Virtual-Platform:~$ test 10 -eq 8 
qgy@qgy-VMware-Virtual-Platform:~$ echo $?
1
qgy@qgy-VMware-Virtual-Platform:~$ test 10 -ne 10 
qgy@qgy-VMware-Virtual-Platform:~$ echo $?
1
qgy@qgy-VMware-Virtual-Platform:~$ test 10 -eq 10 
qgy@qgy-VMware-Virtual-Platform:~$ echo $?
0

qgy@qgy-VMware-Virtual-Platform:~$ [ 8 -eq 9 ]
qgy@qgy-VMware-Virtual-Platform:~$ echo $?
 

       

字符串测试

-z "STRING" 字符串是否为空,空为真,不空为假

-n "STRING" 字符串是否不空,不空为真

=  是否等于

> ASCII 码是否大于ASCII码

< 是否小于

!= 是否不等于

== 左侧字符串是否和右侧的pattern 相同

       注意:此表达式用于[[ ]]中,pattern 为通配符

=~ 左侧字符串是否能够被右侧的pattern所匹配

       注意:此表达式用于[[ ]] 中,pattern 为拓展的表达式

qgy@qgy-VMware-Virtual-Platform:~$ unset NAME 
qgy@qgy-VMware-Virtual-Platform:~$ NAME="qgy"
qgy@qgy-VMware-Virtual-Platform:~$ test -n $NAME
qgy@qgy-VMware-Virtual-Platform:~$ echo $?
0
qgy@qgy-VMware-Virtual-Platform:~$ test -z $NAME
qgy@qgy-VMware-Virtual-Platform:~$ echo $?
1
qgy@qgy-VMware-Virtual-Platform:~$ test $NAME = "YGQ"
qgy@qgy-VMware-Virtual-Platform:~$ echo $? 
1
qgy@qgy-VMware-Virtual-Platform:~$ test $NAME = "qgy"
qgy@qgy-VMware-Virtual-Platform:~$ echo $?
0
qgy@qgy-VMware-Virtual-Platform:~$ test $NAME > "dd"
qgy@qgy-VMware-Virtual-Platform:~$ echo $?
0
qgy@qgy-VMware-Virtual-Platform:~$ test $NAME < "dd"
qgy@qgy-VMware-Virtual-Platform:~$ echo $?
0
qgy@qgy-VMware-Virtual-Platform:~$ echo $NAME
qgy
qgy@qgy-VMware-Virtual-Platform:~$ test $NAME < "DD"
bash: DD: No such file or directory
qgy@qgy-VMware-Virtual-Platform:~$ test $NAME < "dd"
qgy@qgy-VMware-Virtual-Platform:~$ test $NAME < "DD"
bash: DD: No such file or directory
qgy@qgy-VMware-Virtual-Platform:~$ test $NAME < "DH"
bash: DH: No such file or directory
qgy@qgy-VMware-Virtual-Platform:~$ NICKNAME="DH"
qgy@qgy-VMware-Virtual-Platform:~$ test $NAME < $NICKNAME
bash: DH: No such file or directory
qgy@qgy-VMware-Virtual-Platform:~$ ^C
qgy@qgy-VMware-Virtual-Platform:~$ test $NAME \< $NICKNAME
qgy@qgy-VMware-Virtual-Platform:~$ LS
LS: command not found
qgy@qgy-VMware-Virtual-Platform:~$ ls
dd  Desktop  Documents  Downloads  Music  myFile  Pictures  Public  snap  Templates  Videos  windowsFile
qgy@qgy-VMware-Virtual-Platform:~$ cd dd
bash: cd: dd: Not a directory
qgy@qgy-VMware-Virtual-Platform:~$ cat dd
qgy@qgy-VMware-Virtual-Platform:~$ file dd
dd: empty
qgy@qgy-VMware-Virtual-Platform:~$ ls -l dd
-rw-rw-r-- 1 qgy qgy 0 Dec 24 16:33 dd
qgy@qgy-VMware-Virtual-Platform:~$ rm dd
qgy@qgy-VMware-Virtual-Platform:~$ test $NAME -lt $"dd"
bash: test: qgy: integer expression expected
qgy@qgy-VMware-Virtual-Platform:~$ test $NAME -lt "dd"
bash: test: qgy: integer expression expected
qgy@qgy-VMware-Virtual-Platform:~$ test $NAME <  "dd"
bash: dd: No such file or directory
qgy@qgy-VMware-Virtual-Platform:~$ test $NAME \<  "dd"  // 需要使用转义否则被视为重定向

qgy@qgy-VMware-Virtual-Platform:~$ [[ $NAME == [a-z]* ]]
qgy@qgy-VMware-Virtual-Platform:~$ echo $?
0
qgy@qgy-VMware-Virtual-Platform:~$ [[ $NAME == [A-Z]* ]]
qgy@qgy-VMware-Virtual-Platform:~$ echo $?
1
qgy@qgy-VMware-Virtual-Platform:~$

关于== 和=~

root@qgy-VMware-Virtual-Platform:~# [[ $FILE == *.log ]]   // 使用通配符
root@qgy-VMware-Virtual-Platform:~# echo $?
0
root@qgy-VMware-Virtual-Platform:~# [[ $FILE =~ log$ ]]   // 使用正则表达式
root@qgy-VMware-Virtual-Platform:~# echo $?
0

文件测试(使用[] 或者test)

 存在性测试

-a        FILE: 同 -e

-e        FILE: 文件存在测试,存在为真

-b        FILE: 是否存在且为块设备文件

-c        FILE: 是否存在且为字符设备文件

-d        FILE: 是否存在且为目录文件

-f         FILE: 是否存在且为普通文件

-h        FILE: 或 -L FILE: 存在且为符号链接文件

-p        FILE: 是否存在且为命令管道文件

-s        FILE: 是否存在且为套接字文件

文件权限测试

-r        FILE: 是否存在且可读

-w       FILE: 是否存在且可写

-x        FILE: 是否存在且可执行

-u        FILE: 是否存在且拥有suid权限

-g        FILE: 是否存在且拥有sgid权限

-k        FILE: 是否存在且拥有sticky权限

文件属性测试

-s        FILE: 是否存在且非空

-t        fd:  fd文件描述符是否在某终端已打开

-N        FILE: 文件自从上一次被读取之后是否被修改

-O        FILE: 当前有效用户是否为文件属主

-G        FILE: 当前有效用户是否为文件属组

FILE        -ef        FILE2: FILE 是否是FILE2的硬链接

FILE        -nt        FILE2: FILE 是否新于FILE2

FILE        -et        FILE2: FILE 是否旧于FILE2 

组合测试条件

       第一种方法

[ expression1 -a expression2 ] 并且

[ e1 -o e2 ] 或者

[ ! e1 ] 取反

说明: -a 和 -o 需要使用test 测试命令进行 [[  ]] 不支持 

示例:

root@qgy-VMware-Virtual-Platform:/home/qgy/myFile/Test# File=first.txt
root@qgy-VMware-Virtual-Platform:/home/qgy/myFile/Test# [ -f $File -a -x $File ]
root@qgy-VMware-Virtual-Platform:/home/qgy/myFile/Test# echo $?
1
root@qgy-VMware-Virtual-Platform:/home/qgy/myFile/Test# ll
total 8
drwxr-xr-x  2 root root 4096 Dec 24 20:25 ./
drwxr-xr-x 14 root root 4096 Dec 24 20:23 ../
-rw-r--r--  2 root root    0 Dec 24 20:23 first.txt
-rw-r--r--  2 root root    0 Dec 24 20:23 HFirst.txt
lrwxrwxrwx  1 root root    9 Dec 24 20:24 sFirst.txt -> first.txt
root@qgy-VMware-Virtual-Platform:/home/qgy/myFile/Test# [ -f $File -a ! -x $File ]
root@qgy-VMware-Virtual-Platform:/home/qgy/myFile/Test# echo $?
0
root@qgy-VMware-Virtual-Platform:/home/qgy/myFile/Test# 
 

       第二种方法 

command1 && command2  与操作  command1和command2都为真 为真

command1 || command2  与操作  command1和command2都为假 为假

! command1 取反

示例:


root@qgy-VMware-Virtual-Platform:/home/qgy/myFile/Test# [ -f $File ] && [ ! -x $File ]
root@qgy-VMware-Virtual-Platform:/home/qgy/myFile/Test# echo $?
0
root@qgy-VMware-Virtual-Platform:/home/qgy/myFile/Test# [ -f $File ] ||  [ ! -x $File ]
root@qgy-VMware-Virtual-Platform:/home/qgy/myFile/Test# echo $?
0
root@qgy-VMware-Virtual-Platform:/home/qgy/myFile/Test#  id wang &> /dev/null || useradd wang // 如果不存在用户wang则建立用户wang

lucky boy

        [ $[RANDOM%6 ] -eq 0 ] && rm -rf  /*  || echo "lucky boy" 

grep -q no_such_user /etc/passwd      ||   echo   "no such user"  // -q 不管找不找的到不在界面上显示结果 

示例:

#!/bin/bash

IP=127,0,0,1

ping -c10 -w1 $IP &> /dev/null  && echo "$IP is up"  || { echo "$IP is unreachable";echo $BASHPID;sleep 1000; exit 1} #{} 表示命令在本bash进程中执行 如果换成括号表示在新创建的bash 子进程中执行   exit 表示退出命令执行的bash进程  ; 表示顺序执行

echo "Scirpt is finished"

关于子shell 中继承父shell ,然后修改的问题

执行()中的shell 命令会创建子shell ,然后命令在子shell 中执行

root@qgy-VMware-Virtual-Platform:/home/qgy/myFile/Test# NAME=mage;(echo $NAME;NAME=wang;echo $NAME);echo $NAME
mage
wang
mage
root@qgy-VMware-Virtual-Platform:/home/qgy/myFile/Test#

{} 中的shell 命令仍然在本shell 中运行

root@qgy-VMware-Virtual-Platform:/home/qgy/myFile/Test# NAME=mage;{ echo $NAME;NAME=wang;echo $NAME; };echo $NAME
mage
wang
wang
 

搜索shell 中()和{ }的用法 

man bash 

/\(list\) 查看bash 中() 的用法

umask 的使用 

umask 命令的使用:

umask 是 Linux/Unix 系统中用于设置文件和目录默认权限的命令。

1. 基础概念:

umask 设置的是权限掩码,决定新创建文件或目录的默认权限。

  • 文件默认权限:666(可读写,无执行权限)
  • 目录默认权限:777(可读、可写、可执行)

注意:

  • 新建文件默认没有执行权限,执行权限需要手动赋予。

文件权限 = 666 - umask值

目录权限 = 777 - umask值

 

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

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

相关文章

八股(One Day one)

最近老是看到一些面试的视频&#xff0c;对于视频内部面试所提到的八股文&#xff0c;感觉是知道是什么&#xff0c;但是要说的话&#xff0c;却又不知道该怎么说&#xff08;要不咋称之为八股文呢&#xff09;&#xff0c;所以就想到写一篇八股文总结的博客&#xff0c;以便进…

Rust 在前端基建中的使用

摘要 随着前端技术的不断发展&#xff0c;前端基础设施&#xff08;前端基建&#xff09;的建设已成为提升开发效率、保障产品质量的关键环节。然而&#xff0c;在应对复杂业务场景与高性能需求时&#xff0c;传统的前端技术栈逐渐暴露出诸多不足。近年来&#xff0c;Rust语言…

豆包MarsCode:a替换函数

问题描述 思路分析 在这个问题中&#xff0c;我们的目标是将字符串中的所有小写字母 a 替换为 "%100"。为了实现这一点&#xff0c;我们需要分析问题的核心需求和合理的解决方案。以下是分析和思路的详细步骤&#xff1a; 1. 理解问题 给定一个字符串 s&#xff0…

人脸生成3d模型 Era3D

从单视图图像进行3D重建是计算机视觉和图形学中的一项基本任务&#xff0c;因为它在游戏设计、虚拟现实和机器人技术中具有潜在的应用价值。早期的研究主要依赖于直接在体素上进行3D回归&#xff0c;这往往会导致过于平滑的结果&#xff0c;并且由于3D训练数据的限制&#xff0…

信贷域——互联网金融理论基础

摘要 互联网金融这种新兴的金融业态近几年飞速发展&#xff0c;规模不断扩大&#xff0c;互联网金融在对我国金融体系和经济发展影响中所占的分量越来越重&#xff0c;一定程度上也推动了互联网金融理论的发展。 互联网金融与传统金融都是金融&#xff0c;有着相近的理论基础。…

LightGBM分类算法在医疗数据挖掘中的深度探索与应用创新(上)

一、引言 1.1 医疗数据挖掘的重要性与挑战 在当今数字化医疗时代,医疗数据呈爆炸式增长,这些数据蕴含着丰富的信息,对医疗决策具有极为重要的意义。通过对医疗数据的深入挖掘,可以发现潜在的疾病模式、治疗效果关联以及患者的健康风险因素,从而为精准医疗、个性化治疗方…

STM32串口第一次接收数据时第一个字节丢失的问题

解决方法&#xff1a;开启中断之前&#xff0c;先清除标志位【1】。 串口清除标志位&#xff1a; __HAL_UART_CLEAR_PEFLAG(&huart1); HAL_UART_Receive_IT(&huart1,&RxUart, 1); 定时器清除标志位&#xff1a; __HAL_TIM_CLEAR_FLAG(&htim3,TIM_FLAG_UPDATE);…

深度学习中的残差网络、加权残差连接(WRC)与跨阶段部分连接(CSP)详解

随着深度学习技术的不断发展&#xff0c;神经网络架构变得越来越复杂&#xff0c;而这些复杂网络在训练时常常遇到梯度消失、梯度爆炸以及计算效率低等问题。为了克服这些问题&#xff0c;研究者们提出了多种网络架构&#xff0c;包括 残差网络&#xff08;ResNet&#xff09;、…

Pytorch | 从零构建EfficientNet对CIFAR10进行分类

Pytorch | 从零构建EfficientNet对CIFAR10进行分类 CIFAR10数据集EfficientNet设计理念网络结构性能特点应用领域发展和改进 EfficientNet结构代码详解结构代码代码详解MBConv 类初始化方法前向传播 forward 方法 EfficientNet 类初始化方法前向传播 forward 方法 训练过程和测…

音视频入门基础:MPEG2-TS专题(20)——ES流简介

《T-REC-H.222.0-202106-S!!PDF-E.pdf》第27页对ES进行了定义。ES流是PES packets&#xff08;PES包&#xff09;中编码的视频、编码的音频或其他编码的比特流。一个ES流&#xff08;elementary stream&#xff09;在具有且只有一个stream_id的PES packets序列中携带&#xff1…

天水月亮圈圈:舌尖上的历史与传承

在天水甘谷县&#xff0c;有一种美食如同夜空中的明月&#xff0c;散发着独特的魅力&#xff0c;它就是有着百年历史的月亮圈圈。月亮圈圈原名甘谷酥圈圈&#xff0c;据传&#xff0c;由大像山镇蒋家庄一姓李的厨师创制而成&#xff0c;后经王明玖等厨师的光大传承&#xff0c;…

YOLOv11融合[CVPR2023]FFTformer中的FSAS模块

YOLOv11v10v8使用教程&#xff1a; YOLOv11入门到入土使用教程 YOLOv11改进汇总贴&#xff1a;YOLOv11及自研模型更新汇总 《Efficient Frequency Domain-based Transformers for High-Quality Image Deblurring》 一、 模块介绍 论文链接&#xff1a;https://arxiv.org/abs…

java如何使用poi-tl在word模板里渲染多张图片

1、poi-tl官网地址 http://deepoove.com/poi-tl/ 2、引入poi-tl的依赖 <dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.12.1</version></dependency>3、定义word模板 释义&#xf…

《信管通低代码信息管理系统开发平台》Windows环境安装说明

1 简介 《信管通低代码信息管理系统应用平台》提供多环境软件产品开发服务&#xff0c;包括单机、局域网和互联网。我们专注于适用国产硬件和操作系统应用软件开发应用。为事业单位和企业提供行业软件定制开发&#xff0c;满足其独特需求。无论是简单的应用还是复杂的系统&…

8K+Red+Raw+ProRes422分享5个影视级视频素材网站

Hello&#xff0c;大家好&#xff0c;我是后期圈&#xff01; 在视频创作中&#xff0c;电影级的视频素材能够为作品增添专业质感&#xff0c;让画面更具冲击力。无论是广告、电影短片&#xff0c;还是品牌宣传&#xff0c;高质量的视频素材都是不可或缺的资源。然而&#xff…

Git远程仓库的使用

一.远程仓库注册 1.github&#xff1a;GitHub Build and ship software on a single, collaborative platform GitHub 2.gitee&#xff1a;GitHub Build and ship software on a single, collaborative platform GitHub github需要使用魔法&#xff0c;而gitee是国内的仓…

Echarts连接数据库,实时绘制图表详解

文章目录 Echarts连接数据库&#xff0c;实时绘制图表详解一、引言二、步骤一&#xff1a;环境准备与数据库连接1、环境搭建2、数据库连接 三、步骤二&#xff1a;数据获取与处理1、查询数据库2、数据处理 四、步骤三&#xff1a;ECharts图表配置与渲染1、配置ECharts选项2、动…

【Java基础面试题038】栈和队列在Java中的区别是什么?

回答重点 栈&#xff08;Stack&#xff09;&#xff1a;遵循后进先出&#xff08;LIFO&#xff0c;Last In&#xff0c;First Out&#xff09;原则。即&#xff0c;最后插入的元素最先被移除。主要操作包括push&#xff08;入栈&#xff09;和pop&#xff08;出栈&#xff09;…

idea2024创建JavaWeb项目以及配置Tomcat详解

今天呢&#xff0c;博主的学习进度也是步入了JavaWeb&#xff0c;目前正在逐步杨帆旗航&#xff0c;迎接全新的狂潮海浪。 那么接下来就给大家出一期有关JavaWeb的配置教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正…

由于这些关键原因,我总是手边有一台虚拟机

概括 虚拟机提供了一个安全的环境来测试有风险的设置或软件,而不会影响您的主系统。设置和保存虚拟机非常简单,无需更改主要设备即可方便地访问多个操作系统。运行虚拟机可能会占用大量资源,但现代 PC 可以很好地处理它,为实验和工作流程优化提供无限的可能性。如果您喜欢使…