【Linux网络】Shell脚本语句

目录

一、条件语句

1.1 测试

1.2 比较整数数值

1.3 字符串比较

1.4 双中括号

1.5 ()与{}

1.6 if语句

1.7 case语句

1.8 echo命令

二、循环语句

2.1 for循环

2.2 while循环

2.3 until循环


一、条件语句

1.1 测试

格式一:test 条件表达式

格式二:[  条件表达式  ]

测试 是否成功使用 $?  返回值操作符:
-d:测试是否为目录(Directory)
-e:测试目录或文件是否存在(Exist)
-a:测试目录或文件是否存在(Exist)   
-f:测试是否为文件(File)
-r:测试当前用户是否有权限读取(Read)
-w:测试当前用户是否有权限写入(Write)
-x:测试当前用户是否有权限执行(eXcute)
-L: 测试是否为软连接文件属性测试补充:
-s FILE #是否存在且非空
-t fd #fd 文件描述符是否在某终端已经打开
-N FILE #文件自从上一次被读取之后是否被修改过
-O FILE #当前有效用户是否为文件属主
-G FILE #当前有效用户是否为文件属组条件测试:判断某需求是否满足,需要由测试机制来实现,专用的测试表达式需要由测试命令辅助完成测试过程,实现评估布尔声明,以便用在条件性环境下进行执行若真,则状态码变量 $? 返回0若假,则状态码变量 $? 返回1

1.2 比较整数数值

[  整数1  -操作符  整数2  ] 公式

操作符:

  • -eq:第一个数等于(Equal)第二个数

  • -ne:第一个数不等于(Not Equal)第二个数

  • -gt:第一个数大于(Greater Than)第二个数

  • -lt:第一个数小于(Lesser Than)第二个数

  • -le:第一个数小于或等于(Lesser or Equal)第二个数

  • -ge:第一个数大于或等于(Greater or Equal)第二个数

1.3 字符串比较

[  字符串1 =  字符串2 ]  是否相同[  字符串1  !=  字符串2 ]  是否不相同[  -z  字符串 ]   是否为空[  -n  字符串 ] 字符是否存在

操作符:

        = :字符串内容相同

       != :字符串内容不同

       -z :字符串内容为空

       -n :字符串是否存在

1.4 双中括号

[[ expression ]] 用法== 左侧字符串是否和右侧的PATTERN相同注意:此表达式用于[[ ]]中,PATTERN为通配符=~ 左侧字符串是否能够被右侧的正则表达式的PATTERN所匹配注意: 此表达式用于[[  ]]中;扩展的正则表达式
#通配符
FILE=test.log
[[ "$FILE" == *.log ]]
echo $?
0FILE=test.txt
[[ "$FILE" == *.log ]]
echo $?
1[[ "$FILE" != *.log ]]
echo $?
0#正则表达式以log结尾的文件
[[  $file   =~  log$   ]]

1.5 ()与{}

(CMD1;CMD2;...)和 { CMD1;CMD2;...;  } 都可以将多个命令组合在一起,批量执行

()会开启一个新的子bash,不会影响当前bash
( cd /data;ls )
不会改变当前的工作路径{}不会影响当前的bash
{ cd /data;ls }
会改变当前的工作路径,需要主要{ }要与命令间有空格

1.6 if语句

单分支

格式一:
if    判断条件
then    条件为真后执行的代码
fi格式二:
if    判断条件;then
条件为真后执行的代码
fi

双分支

if     判断条件
then
条件为真时执行的代码
else
条件为假时执行的代码
fi

多分支

if    判断条件1
then    条件1为真时执行的代码
elif    判断条件2
then    条件2为真时执行的代码
elif    判断条件3
then    条件3为真时执行的代码
else    以上条件全为假时执行的代码
fi

1.7 case语句

case    $i    inPART1)        #满足PART1则执行分支1
分支1
;;
PART2)        #满足PART2则执行分支2
分支2
;;
PART3)        #满足PART3则执行分支3
分支3
;;
...
...
*)            #以上条件均不满足,则执行该分支
默认分支
;;esac

注意!!

case只支持通配符:

* 任意长度任意字符        ?任意单个字符        [0-9]指定范围内的任意单个字符

1.8 echo命令

echo -n   表示不换行输出
echo -e   表示输出转义符

选项作用
\r光标移至行首,并且不换行
\s当前shell的名称,如bash
\t插入Tab键,制表符,可用于写脚本时对齐
\n输出换行
\f换行,但光标仍停留在原处
\表示插入"\"本身转义
\b表示退格 不显示前一个字符
\c抑制更多的输出或不换行

二、循环语句

2.1 for循环

语法1:for    变量名    in    {list}    #list表中有多少个量就执行多少次
docommand
done花括号{}和seq在for循环的应用:
for i in {1..50..2} 1-50的奇数for i in {2..50..2} 1-50的偶数
for i in {10..1}  1-10倒序排列for i in $(seq 10)  1-10正序排列
for i in $(seq 10 -1 1) 1-10倒序排列
for i in $(seq 1 2 10) 1-10的奇数,中间为步长
语法2:for    ((expr1;expr2;expr3))
docommand
doneexpr1:定义变量并赋初值
expr2:定义条件,决定是否循环
expr3:决定循环变量如何改变,决定循环什么时候退出

拓展举例:


99乘法表

方法1:

#!/bin/bash
for j in {1..9}
dofor i in `seq $j`doecho -e "${i}x${j}=$[i*j] \t\c"#\t tab键可以对齐done
echo    #打印换行done

方法2:

#!/bin/bashfor ((i=1;i<=9;i++))
dofor ((j=1;j<=i;j++))doecho -e "${j}x${i}=$[i*j] \t\c"done
echo   #打印换行done

2.2 while循环

语句:while    循环条件        #满足条件则进行循环
docommand
done

拓展举例


批量建立用户

#!/bin/bash
i=0
while [ "${i}" -le 20 ]
do
useradd stu${i}
echo "123456" |passwd --stdin stu${i} &>/dev/null
if [ $? -eq 0 ]
then
echo "用户 stu${i} 被建立"
else
echo "用户 stu${i} 建立失败"
fi
let i++
done

跳出循环的方式:

  • break跳出单个循环 break n 数字数字是几代表跳出n层循环

  • continue终止某次循环中的命令,但是不会完全终止命令

  • exit 直接退出脚本

2.3 until循环

语句:until    条件    #当不满足条件时,执行循环
docommand
done

 拓展举例


定时给某用户发消息

#!/bin/bash
username=$1            #定义变量
if [ $# -lt 1 ]        #若允许脚本后未在后定义预定义变量,则提示信息
then
echo "请在脚本后输入 用户名和发送信息" 
exit 
fiif  grep "^$username" /etc/passwd &>/dev/null
then :
elseecho "用户不存在"exit 
fiuntil who |grep $username &>/dev/null
do
echo "用户不在线"
sleep 5
donemes=$2
echo $mes |write $username

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

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

相关文章

AI技术如何提升内容生产的效率和质量

随着人工智能&#xff08;AI&#xff09;技术的不断发展和应用&#xff0c;内容生产领域也迎来了巨大的变革。AI技术在提升内容生产效率和质量方面发挥着越来越重要的作用&#xff0c;从自然语言处理到生成模型&#xff0c;AI为内容创作者和生产者带来了许多新的机会和挑战。本…

(docker)进入容器后如何使用本机gpu

首次创建容器&#xff0c;不能直接使用本机gpu 在系统终端进行如下配置&#xff1a; 1.安装NVIDIA Container Toolkit 进入Nvidia官网Installing the NVIDIA Container Toolkit — NVIDIA Container Toolkit 1.15.0 documentation&#xff0c;安装NVIDIA Container Toolkit …

AI预测福彩3D采取887定位策略+杀断组+杀和尾+杀和值012缩水测试5月12日预测第1弹

前段时间工作太忙&#xff0c;手头上各种事情较多&#xff0c;没有静下心来对我的AI模型预测结果进行进一步分析筛选&#xff0c;导致最近连续几期与实际开奖结果相差较大。当然&#xff0c;客观来说&#xff0c;搞6码定位的确难度比较大&#xff0c;昨天跟几个常年研究3D的彩友…

OpenCV 光流法总结

0.概述 1.原理说明 2.代码实现 #include <iostream> #include <opencv2/opencv.hpp>int main(int argc, char** argv) {if(argc ! 2) {std::cerr << "Usage: " << argv[0] << " <video_path>" << std::endl;…

从零学算法2391

2391. 收集垃圾的最少总时间 给你一个下标从 0 开始的字符串数组 garbage &#xff0c;其中 garbage[i] 表示第 i 个房子的垃圾集合。garbage[i] 只包含字符 ‘M’ &#xff0c;‘P’ 和 ‘G’ &#xff0c;但可能包含多个相同字符&#xff0c;每个字符分别表示一单位的金属、纸…

商业时代杂志社投稿信箱邮箱

商业时代杂志投稿信箱邮箱 商业时代杂志 《商业时代》、投稿信箱&#xff1a;sysdbjb126.com 《商业时代》、投稿信箱&#xff1a;sysdbjb126.com 《商业时代》、投稿信箱&#xff1a;sysdbjb126.com 《商业时代》、投稿信箱&#xff1a;sysdbjb126.com 咨询电话&#xf…

【RAG 论文】FiD:一种将 retrieved docs 合并输入给 LM 的方法

论文&#xff1a; Leveraging Passage Retrieval with Generative Models for Open Domain Question Answering ⭐⭐⭐⭐ EACL 2021, Facebook AI Research 论文速读 在 RAG 中&#xff0c;如何将检索出的 passages 做聚合并输入到生成模型是一个问题&#xff0c;本文提出了一…

java基础知识点总结2024版(8万字超详细整理)

java基础知识点总结2024版&#xff08;超详细整理&#xff09; 这里写目录标题 java基础知识点总结2024版&#xff08;超详细整理&#xff09;java语言的特点1.简单性2.面向对象3.分布式4.健壮性5.安全性6.体系结构中立7.可移植性8.解释性9.多线程10.动态性 初识java中的main方…

Web前端开发之JavaScript_2

条件语句三元运算符循环语句字符串数组 1. 条件语句 1.1 if语句 if (布尔值){ // “布尔值”往往由一个表达式产生&#xff0c;其中&#xff0c;赋值表达式不具备比较作用 语句; } 1.2 if...else 语句 if...else可成对单独使用&#xff0c;也可多层if...else …

十二届蓝桥杯Python组3月中/高级试题 第三题

** 十二届蓝桥杯Python组3月中/高级试题 第三题 ** 第三题&#xff08;难度系数 3&#xff0c;25 个计分点&#xff09; 提示信息&#xff1a; 心理学用“智力商数”即“IQ”来表示一个人的智力水平。经过研究划分&#xff0c;智力水平可分为7 个等级&#xff1a; 1、IQ≥140…

Java类与对象(一)

类的定义与使用 在Java中使用关键字class定义一个类&#xff0c;格式如下&#xff1a; class 类名{// 成员变量/字段/属性//成员方法/行为 }Java中类和c语言中的结构体有点类似&#xff0c; 在Java中类名一般采用大驼峰&#xff08;每个首字母大写&#xff09;的形式&#xf…

类和对象一(从封装开始讲述)

目录&#xff1a; 一.封装 二.封装扩展之包&#xff0c;自定义包 三.访问限定符 四.static成员 一.封装&#xff1a;封装&#xff1a;将数据和操作数据的方法进行有机结合&#xff0c;隐藏对象的属性和实现细节&#xff0c;仅对外公开接口来和对象进行 交互。面向对象…

Python | 为列表中的元素分配唯一值

我们可以给列表中的所有数字分配一个唯一的值&#xff0c;重复时它会保留给它的值。这是一个非常常见的问题&#xff0c;在Web开发中&#xff0c;处理物品id时会遇到。让我们讨论一下解决这个问题的一些方法。 1. 使用enumerate() 列表解析 # initializing list test_list …

Reactor Netty TCP 服务器端-响应式编程-011

🤗 ApiHug {Postman|Swagger|Api...} = 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱,有温度,有质量,有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace The Next Generation API Development Platform…

Pytorch图像分类模型模型实时在线验证代码

1.训练并保存自己的模型 保存的模型格式为&#xff1a;XXX.pth torch.save(model, "./weight/last.pth")if best_acc <(validation_acc / len_val):torch.save(model, "./weight/best.pth")2.转化为ONNX格式 2.1环境安装&#xff08;window10&#x…

一款简约大气的个人单页介绍主页(附加源码)

一款简约大气的个人单页介绍主页&#xff08;附加源码&#xff09; 效果图部分源码领取源码下期更新预报 效果图 部分源码 .box_bg{width: 100%;height: 100%; }.wenzi{text-align: center;float: left;display: inline;width: 112px;line-height: 48px; } .wenzi2{text-align…

Hikyuu高性能量化研究框架助力探索

Hikyuu Quant Framework 是一款基于C/Python的开源量化交易分析与研究工具&#xff0c;主要用于A股市场的交易策略分析与回测&#xff0c;目前不支持期货等&#xff0c;需要自行改造。 Hikyuu的目标 Hikyuu的最初目的是为了快速对A股全市场股票进行策略回测和验证&#xff0c…

国内镜像地址 Docker、Conda、Node

国内主要系统、软件、开发框架镜像地址&#xff0c;包括 NPM、Centos、Ubuntu、Docker、PIP、Homebrew等。 Conda镜像 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ conda config --add channels https://mirrors.tuna.tsinghua.e…

【C++11】列表初始化、右值引用的详细讲解(上)

前言 在一开始学C之前我们就简单的了解了一下C的发展历史。 相比较而言&#xff0c;C11能更好地用于系统开发和库开发、语法更加泛华和简单化、更加稳定和安全&#xff0c;不仅功能更强大&#xff0c;而且能提升程序员的开发效率加了许多特性&#xff0c;约140个新特性。使得C…

《A data independent approach to generate adversarial patches》论文分享(侵删)

原文链接&#xff1a;A data independent approach to generate adversarial patches | Machine Vision and Applications author{Xingyu Zhou and Zhisong Pan and Yexin Duan and Jin Zhang and Shuaihui Wang}, 一、介绍 在图像识别领域&#xff0c;与数字域中的攻击相比…