shell 脚本编程

简介:用户通过shell向计算机发送指令的,计算机通过shell给用户返回指令的执行结果

通过shell编程可以达到的效果:提高工作效率、可以实现自动化

需要学习的内容:Linux 、  shell的语法规范

编写shell的流程:

      第一步:用vi/vim创建一个.sh的文件。

      第二步:在文件中进行开发。

      第三步:给文件赋予可执行权限。

      第四步:执行脚本。

本地变量: 

     定义变量:Var_Name=”Value“    变量名=“值” 。 

     引用变量: ${Var_Name}

     撤销变量:unset  Var_Name

局部变量:   定义:local Var_Name=”Value“。      在函数内部生效

环境变量:定义:export Var_Name=”Value“。    常用的环境变量:PS1、HOSTNAME、LANG 

 位置变量:主要用于向脚本中传递参数。   表示方法:  $1,$2,$3...$n      举例说明:./2.sh 1 5 9(传入的数据)

特殊变量:  $0   脚本自身名称        $?    上个命令的执行状态        $#  参数列表

变量命名要求:  只能使用数字、字母、下划线组成。  不能以数字开头。   不能使用程序中的关键字。

变量名的默认规则:  见明知意、   自定义变量小写、  换将变量大写。

补充环境变量:set命令可以显示当前系统上所有的变量。  export、env命令可以显示环境变量

bash条件判断基础

判断的作用:判断后续操作的前提条件是否满足;如果满足执行一种指令,不满足则执行另一种指令。

条件测试类型:   整形测试、字符测试、文件测试。

逻辑运算:

与运算    &&       真&&真=真;真&&假=假;假&&假=假;假&&真=假

或运算    | |      真| |真=真      真 | |假=真      假 | | 真 = 真     假 | | 假 = 假

非运算   !        !真=假          !假=真

 判断方式

   1) est EXPRESSION                 举例:test 2 -gt 1

     2)[ EXPRESSION ]                举例:[ 2 -gt 1 ]

3)    [[ EXPRESSION ]]             举例:[[ 2 gt 1 ]] 

4)     用命令执行状态来作为判断条件

查看脚本的执行过程:    bash  -x  脚本

bash条件判断语法格式

    if三种格式:

           单分支 :                   if 条件;then          分支1      fi

           双分支:          if 条件;then     分支1   else   分支2       fi

         多分支:      if 条件;then    分支1       elif 条件;then      分支2       elif 条件;then    分支3....  elif 条件n; then  分支n   else     分支  fi

练习题如下

               1)案例:90分成绩以上为 A;80分成绩以上为 B;70分成绩以上为 C; 60分成绩以上为 D;0分以上为     E。

答:
#!/bin/bashscore=$1if [ $score -gt 100 ];thenecho "pleas enter 0-100"elif [ $score -gt 90 ];thenecho "A"elif [ $score -gt 80 ];thenecho "B"elif [ $score -gt 70 ];thenecho "C"elif [ $score -gt 60 ];thenecho "D"else      echo "E"fi

2)案例:让用户指定一个文件,判断:如果有空白行,就显示空白行数,没有则提示“no“

#!/bin/bashfile=$1lines=`grep "^$" $file | wc -l`if [ $lines -gt 0 ];thenechho $lines
elseecho "no"
fi  

整形测试方法:整形测试通常都是二元测试,格式是:num1 oprand num.

操作符:  

   -gt:大于       -lt:小于    -ge:大于等于    -le:小于等于   -ne:不等于     -eq:等于

用户和脚本进行交互:   

       位置变量       red 命令:    read  -p  "参数"   变量名

               例:read  -p  "请输入第一个数字:" num1

3) 让用户通过键盘输入一个用户名 如果用户存在,就显示其用户的用户名和uid 否则,就显示用户不存在。

#!/bin/bash
read -p  "enter a user name:"  username
id  -u  $username &?》/dev/null
num=$?
if [ $num -eq 0 ];thenuid=`id -u $userName`echo "$userName is exists,uid is $uid"
elseecho "user is not exists"
fi

4)让用户通过键盘输入一个用户名,如果用户不存在就退出 如果用户的uid大于等于500,就说明是普通用户;输出”普通“ 否则,就说明这是管理员用户或系统用户。

        方法一:

#!/bin/bash
read -p "enter a user name" name
id -u $name &>/dev/null
num=$?
if [ $num -eq 0 ];thenuid=`id -u $name`if [ $uid -gt 499 ];thenecho "putong"elseecho "xt"fi
elseecho "not exists"
fi

   方法二:

#!/bin/bash
read -p "enter a user name" nameid -u $name &>/dev/null
num=$?
if [ $num -ne 0 ];thenecho "no"exit 0
fi
uid=`id -u $name`
if [ $uid -gt 499 ];thenecho "pt"
elseecho "xt"
fi

5)让用户通过键盘输入一个用户名,如果用户不存在就退出 如果其uid等于其gid,就说塔是个”good guy“ 否则就说明是”bad guy“。

#!/bin/bash
read -p "enter a user name" name
id -u $name &> /dev/null
num=$?
if [ $num -ne 0 ];thenecho "no"exit 0
fi
uid=`id -u $name`
gid=`id -g $name`
if [ $uid -eq $gid ];thenecho "good"
else echo "bad"
fi

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

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

相关文章

数据库系统体系结构-DBMS的三级模式结构、DBMS的工作方式、模式定义语言、二级映射

一、体系结构的概念 1、大多数DBMS遵循三级模式结构 (1)外模式 (2)概念模式 (3)内模式 2、DBMS的体系结构描述的应该是系统的组成结构及其联系以及系统结构的设计和变化的原则等 3、1978年美国国家标…

Java学习 (七) 面向对象--多态、object类

一、多态性 多态在java中的体现是 父类的引用指向子类的对象 格式: 父类类型 变量名 子类对象 1、代码案例 vi Person.java public class Person {public String name;public int age;//新增方法public void eat(){System.out.println("人吃饭");}…

github仓库的基本使用-创建、上传文件、删除

1.第一步 先点击左侧菜单栏的远程仓库 2.点击NEW 3.创建仓库 然后点击右下角的 CREATE 4.点击code 点击SSH,然后我出现了You don’t have any public SSH keys in your GitHub account. You can add a new public key, or try cloning this repository via HTTPS. 1&#xff…

【MySQL备份】Percona XtraBackup加密备份实战篇

目录 1.前言 2.准备工作 2.1.环境信息 2.2.配置/etc/my.cnf文件 2.3.授予root用户BACKUP_ADMIN权限 2.4.生成加密密钥 2.5.配置加密密钥文件 3.加密备份 4.优化加密过程 5.解密加密备份 6.准备加密备份 7.恢复加密备份 7.1.使用rsync进行恢复 7.2.使用xtrabackup命令恢…

order by优化案例与原理剖析

一、引言 在数据库查询中,ORDER BY 语句用于对结果集进行排序,是日常开发中不可或缺的一部分。然而,随着数据量的增长,ORDER BY 的性能问题逐渐凸显。本文将结合一个实际案例,分析如何优化 ORDER BY 的性能&#xff0…

ICCV2023图像相关论文摘要速览两部分

tips:有两部分的原因主要是我筛选的时候没有统一image & images Paper1 PromptCap: Prompt-Guided Image Captioning for VQA with GPT-3 摘要原文: Knowledge-based visual question answering (VQA) involves questions that require world knowledge beyon…

深度学习之半监督学习:一文梳理目标检测中的半监督学习策略

什么是半监督目标检测? 传统机器学习根据训练数据集中的标注情况,有着不同的场景,主要包括:监督学习、弱监督学习、弱半监督学习、半监督学习。由于目标检测任务的特殊性,在介绍半监督目标检测方法之前,我…

YOLO10 用分割数据集训练

1、 下载Funiture数据集 http://kaggle.com/datasets/nicolaasregnier/furniture 并生成数据配置文件 data.yaml import yaml import os dataDir "你的工程路径/Furniture/sam_preds_training_set" os.path.join(dataDir, train) num_classes 2 classes [Chair, …

为什么要使用多线程(并发编程)

目录 1.上下文的切换 1.1 什么是上下文切换 2. 并发编程的死锁问题 2.1 死锁产生的原因 2.2 避免死锁的方法 3.资源限制的挑战3.1 什么是资源限制 并发编程的目的是为了让程序更快,大家都知道并不是开启的线程越多越快,因为开启的线程越多随即面临…

【驱动篇】龙芯LS2K0300之红外驱动

实验目标 编写HX1838红外接收器驱动,根据接收的波形脉冲解码红外按键键值 模块连接 模块连接:VCC接Pin 2,GND接Pin1,DATA接Pin16 驱动代码 HX1838 GPIO初始化,申请中断,注意:GPIO48默认是给…

部署最新版本elasticsearch 8.14.1和 kibana 8.14.1

部署最新版的elasticsearch和kibana&#xff0c;前提时已经部署docker 设置用户密码 export ELASTIC_PASSWORD"<ES_PASSWORD>" # 设置elastic用户密码 export KIBANA_PASSWORD"<KIB_PASSWORD>" # 设置kibana_system密码创建docker网络 保…

实用的网站

前端 精简CSS格式 Font Awesome 图标库 BootCDN 加速服务 LOGO U钙网 AI AI工具集 视频下载 B站视频解析下载

2023-2024华为ICT大赛中国区 实践赛网络赛道 全国总决赛 理论部分真题

Part1 数通模块(10题)&#xff1a; 1、如图所示&#xff0c;某园区部署了IPv6进行业务测试&#xff0c;该网络中有4台路由器&#xff0c;运行OSPFv3实现网络的互联互通&#xff0c;以下关于该OSPFv3网络产生的LSA的描述&#xff0c;错误的是哪一项?(单选题) A.R1的LSDB中将存在…

Appium adb 获取appActivity

方法一&#xff08;最简单有效的方法&#xff09; 通过cmd命令&#xff0c;前提是先打开手机中你要获取包名的APP adb devices -l 获取连接设备详细信息 adb shell dumpsys activity | grep mFocusedActivity 有时获取到的不是真实的Activity 方法二 adb shell monkey -p …

【瑞吉外卖 | day01】项目介绍+后台登录退出功能

文章目录 瑞吉外卖 — day011. 所需知识2. 软件开发整体介绍2.1 软件开发流程2.2 角色分工2.3 软件环境 3. 瑞吉外卖项目介绍3.1 项目介绍3.2 产品原型展示3.3 技术选型3.4 功能架构3.5 角色 4. 开发环境搭建4.1 数据库环境搭建4.2 Maven项目构建 5. 后台系统登录功能5.1 创建需…

会声会影2024破解版下载 让视频编辑更简单、更有趣

在数字时代&#xff0c;视频已经成为我们生活中不可或缺的一部分。无论是记录生活、分享快乐&#xff0c;还是宣传产品、传递信息&#xff0c;视频都扮演着重要的角色。然而&#xff0c;对于很多人来说&#xff0c;视频编辑却是一个让人望而却步的领域。复杂的软件操作、繁琐的…

容器安全:等保合规性的基石

随着云计算和微服务架构的蓬勃发展&#xff0c;容器技术已经成为现代IT基础设施不可或缺的一部分。在网络安全等级保护制度&#xff08;等保&#xff09;的框架下&#xff0c;容器安全的要求日益凸显&#xff0c;成为等保合规性的基石。本文将深入探讨容器安全在等保中的重要性…

【kneighborsclassifier 函数及其参数介绍】

文章目录 一、kneighborsclassifier是什么&#xff1f;二、使用步骤三、kneighborsclassifier函数及其参数详解1. 参数说明 一、kneighborsclassifier是什么&#xff1f; kneighborsclassifier 是 scikit-learn 库中 K-近邻算法的实现&#xff0c;用于分类任务。KNN 算法的基本…

爽!强化学习+注意力机制,吞吐量提升了10多倍!

通过引入注意力机制&#xff0c;强化学习模型不仅能够更加高效地处理复杂的环境和任务&#xff0c;还能在学习和决策过程中实现更高的精度和适应性。 因此这种结合迅速成为了各大领域的研究热点&#xff0c;而且已经在实际应用中有了显著的性能提升。比如分散式强化学习框架SA…

在嵌入式商用里面哪款RTOS(实时操作系统)比较多人用?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「嵌入式的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01; 传统的RTOS和嵌入式Linu…