DJ8-4 shell 语句的分类、shell 的结构性语句

news2024/11/15 19:28:30

目录

8.7  shell 编程

8.7.1  shell 编程的基本过程

8.7.2  实例

8.7.3  shell 程序和语句

8.8  说明性语句和功能性语句

8.8.1  说明性语句(注释行)

8.8.2  常用的功能性语句

8.9  结构性语句

8.9.1  条件语句 if

8.9.2  测试语句 test

8.9.3  多路分支语句 case…esac

8.9.4  循环语句 for…do…done

8.9.5  循环语句 while…do…done

8.9.6  循环控制语句 break 和 continue


8.7  shell 编程

8.7.1  shell 编程的基本过程

包含以下三步:

  1. 创建 shell 文件,即后缀名为 .sh 的文件
  2. 赋予 shell 文件执行权限,即使用 chmod 命令修改权限
  3. 执行 shell 文件,即在命令行调用 shell 文件

8.7.2  实例

r=4,w=2,x=1
若要rwx属性,则4+2+1=7
若要rw-属性,则4+2=6
若要r-x属性,则4+1=5

8.7.3  shell 程序和语句

shell 程序由零至多条 shell 语句构成。

shell 语句以下三大类:

  • 说明性语句:以 # 号开始到行尾的部分,不被解释执行。
  • 功能性语句:任意的 OS 命令、shell 内部命令、自编程序、其它 shell 程序名等。
  • 结构性语句:条件测试语句、多路分支语句、循环语句、循环控制语句等。             

8.8  说明性语句和功能性语句

8.8.1  说明性语句(注释行)

注释行可以出现在程序中的任何位置,既可以单独占用一行,也可以接在执行语句的后面。以 # 号开始到所在行的行尾部分,都不被解释执行。例如:

#! /bin/sh 告诉OS用哪种shell来解释执行程序
#
# 本程序说明
#
cmd1
cmd2    # cmd2的语句说明

8.8.2  常用的功能性语句

1、read 命令

read 从标准输入读入一行,并赋值给后面的变量。注意:执行 read 语句时,shell 程序将会等待你的一个标准输入,而一旦回车就代表输入结束,因此必须在一行中输入完毕。

把读入的数据全部赋给 var,语法格式如下:

read var

把读入行中的第一个参数赋给 var1,第二个参数赋给 var2,……,语法格式如下

read var1 var2 var3

如果执行 read 语句时标准输入无数据,则程序在此停留等待,直到数据的到来或被终止运行:

当变量个数和参数个数不匹配时,将会把剩下的所有参数赋给最后一个变量:

2、expr 命令

算术运算命令 expr 主要用于进行简单的整数运算,包括:加 (+)、减 (-)、乘 (\*)、整除 (/) 和求模 (%) 等操作。例如:

$ expr 12 + 5 \* 3
27

$ expr 3 - 8 / 2
-1

$ expr 25 % 4
1

$ num=9
$ sum=`expr $num \* 6`
$ echo $sum
54

没有 expr 就不能进行算术运算:

8.9  结构性语句

结构性语句主要根据程序的运行状态、输入数据、变量的取值、控制信号以及运行时间等因素来控制程序的运行流程。主要包括以下几类语句:

  • 条件测试语句(两路分支)
  • 多路分支语句
  • 循环语句
  • 循环控制语句

无任何结构性语句的shell脚本程序是一种特例。

8.9.1  条件语句 if

语法结构:

if 表达式
then 命令表1
else 命令表2
fi     

创建 test.sh 文件:

if [ -f file1 ]
then
    echo "文件file1存在"
else
    echo "文件file1不存在"
fi
  • -f:如果 filename为常规文件,则为真
  • -d:如果 filename为目录,则为真
  • [ ]:和表达式两侧必须要有一个空格

执行 test.sh 文件:

初始由于没有为其赋予权限,因此执行失败,于是我们使用 chmod 命令修改其权限。

8.9.2  测试语句 test

test 语句可测试的三种对象:

  • 字符串
  • 整数
  • 文件属性

test 命令测试的条件成立时,命令返回值为真(0),否则返回值为假(非 0)

① 用法一

name="anyujin"
test $name == $1
echo $?

② 用法二

if test -f file1
then
    echo "文件file1存在"
else
    echo "文件file1不存在"
fi

通常把 test 简写为 [  ] :

if [ -f file1 ]

即用方括号替代了 test 语句,注意方括号和表达式之间至少要有一个空格。

8.9.3  多路分支语句 case…esac

case 字符串变量 in
    模式1)
        命令表1
        ;;
    模式2)
        命令表2
        ;;
    ...
    *)
        命令表n
        ;;
esac

检查用户输入的文件名:

# 要求输入一个命令行参数
if [ $# -ne 1 ]
then
	echo "One argument must be declared."
	exit
fi

# 检查用户输入的文件
case $1 in
    file1)
        echo "User selects file1."
        ;;
    file2)
        echo "User selects file2."
        ;;
    *)
        echo "You must select either file1 or file2!"
        ;;
esac

执行上述 shell 程序:

8.9.4  循环语句 for…do…done

当循环次数已知或确定时,使用 for 循环语句来多次执行一条或一组命令。循环体由语句括号 do 和 done 来限定。格式为:

for 变量名 in 单词表
do
    命令表
done

① 用法一

for num in "1" "3" "5"
do
    echo "$num"
done

② 用法二

for num in {1..5}
do
    echo "$num"
done

③ 用法三

# 判断并创建目录backup
if  [ ! -d $HOME/backup ]
then
	mkdir $HOME/backup
fi

# 修改工作路径
cd /home/envoutante/桌面

# 用flist存放当前目录的所有文件
flist=`ls`

# “图片18.png”
num=18

# 循环flist中的所有文件
for file in $flist
do
    # 修改文件名
    mv ${file} 图片${num}.png
    file="图片${num}.png"

    # 复制文件到backup
    cp $file $HOME/backup
    echo "$file copied"

    # 计数器加一
    num=`expr $num + 1`
done

echo '***Back up completed***'

8.9.5  循环语句 while…do…done

语法结构为:

while 命令或表达式
do
    命令表
done

创建文件程序,参数 1 为文件名开头,参数 2 为创建个数:

8.9.6  循环控制语句 break 和 continue

break 语句从包含该语句的最近一层循环中跳出一层,break  n 则跳出 n 层;

continue 语句则马上转到最近一层循环语句的下一轮循环上,continue n 则转到最近 n 层循环语句的下一轮循环上。

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

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

相关文章

什么牌子的电容笔质量好耐用?平板第三方电容笔了解下

苹果的电容笔和普通的电容笔有何区别?其实,就书写情况而言,两者相差不多。只是苹果电容笔生在重量上,更加的沉重,而且还配备了一个特殊的重力传感器,能够准确的感觉到重力对线条的粗细变化。由于苹果这款产…

手机操作系统的沉浮往事(上)

移动终端操作系统,也就是指手机、平板电脑等设备所使用的操作系统。 在移动互联网高度发达的今天,我们使用移动终端操作系统的时长,可能已经远远超过了Windows等桌面操作系统。 那么,你真正了解这些移动终端操作系统吗&#xff1f…

抖音seo源码开发部署技术解析

抖音seo源码开发是一项非常重要的技术,开发需要深入了解抖音平台的特点和用户需求,积累丰富的SEO经验,并不断学习和更新SEO技能,才能不断提高视频在搜索引擎中的曝光率和播放量。 抖音seo开发需要哪些技术 了解抖音的算法和规则&…

浏览器被2345劫持了怎么搞

起因我下载了某些修改东西,然后就被2345篡改了浏览器的数据。我是在虚拟机里下载的,但是虚拟机其实也是物理机的一部分,实际上下载的还是到了物理机里面,于是浏览器打开就变成了2345的导航页面 1 解决方案: 浏览器主页…

DJ8-2 shell 的命令形式、shell 的变量、shell 的内部命令

目录 8.3 shell 可识别的命令形式 8.3.1 单条命令 8.3.2 多条命令 8.3.3 复合命令 8.3.4 后台命令 8.4 shell 变量和引用符 8.4.1 环境变量 plus. echo 命令的使用 8.4.2 系统变量 8.4.3 局部变量(用户变量) 8.4.4 单引号、双引号、…

跨境电商领域的ChatGPT使用攻略

今天分享一个电商领域的ChatGPT应用指南! 一、写谷歌广告词 提示词: 现在你是一名谷歌广告的编写人员,你需要为xxx产品写10条谷歌广告标题和谷歌广告描述。要求是: 1.用英文输出你的答案 2.广告的标题和广告描述的字数等要符合谷歌的标准 3.广告要引人入胜&#xf…

OceanBase—01(入门篇——使用docker安装OceanBase以及介绍连接OB的几种方式)

OceanBase—01(入门篇——使用docker安装OceanBase以及介绍连接OB的几种方式) 1. 前言1.1 安装部署参考1.1.1 安装前提1.1.2 参考 1.1 修改数据库用户名密码1.2 总结常见连接命令 2. 安装部署OceanBase2.1 启动 OceanBase 数据库实例2.1.1 默认拉取最新版…

代码审计——XSS详解

为方便您的阅读,可点击下方蓝色字体,进行跳转↓↓↓ 01 漏洞描述02 审计要点03 漏洞特征04 漏洞案例05 修复方案 01 漏洞描述 跨站脚本攻击(Cross Site Script)是一种将恶意JavaScript代码插入到其他Web用户页面里执行以达到攻击…

没网络的CentOS7的Docker容器安装Java诊断神器Arthas

操作过程 1. 先把jar包下载到本地的windwos2. 打包复制到服务器3. 启动容器设置4.重启容器并使用Arthas 1. 先把jar包下载到本地的windwos 下载地址 下载好后jar,然后CMD执行命令 java -jar arthas-boot.jar 然后随便进入某个jvm进程查看,会见到Conso…

【技术新趋势】面向图像文档的版面智能分析与理解

目录 一、什么是OCR?什么是版面分析理解?二、文档版面分析2.1、版面布局类型2.2、面向文档图像版面分析的实例分割2.3、逻辑结构分析 三、文档版面理解3.1、位置嵌入3.2、表格数据提取 四、智能文档处理技术新解决方案 人类撰写文档是为了记录和保存信息…

Zoho Books助力跨境贸易!深入了解其多币种处理功能

对于跨境行业而言,合作不同的客户以当地货币收取付款是一个不简单的任务。现在,Zoho Books 推出了新的高级多币种处理功能,让多货币付款或收款不再困扰。(注意:此功能在Zoho Books的专业版,高级版&#xff…

使用 ChatGPT 创建 APP 的最佳实践

导读:如果你想用用ChatGPT创建应用程序来赚钱,这是你需要知道的。 本文字数:2900,阅读时长大约:18分钟 如果你想用ChatGPT创建应用程序来赚钱,这是你需要知道的。 我最好先说出坏消息。如果你认为可以两手…

【后端开发】尚硅谷 SpringCloud 学习笔记

文章目录 一、cloud组件二、环境搭建2.1 创建父工程2.2 支付模块构建2.3 消费者模块构建2.3.1 引入RestTemplate2.3.2 远程调用支付模块 三、Eureka3.1 基础知识3.2 单机版Eureka安装3.3 服务注册3.4 Eureka集群3.4.1 Eureka端配置3.4.2 微服务端配置3.4.3 restTemplate负载均衡…

如何让ChatGPT制作XMind思维导图

一、使用ChatGPT辅助生成内容 给大家一个思路,比如我想制作《股神巴菲特给儿女的一生忠告》相关的思维导图,那我们可以在ChatGPT上提问“请使用markdown格式写出股神巴菲特给儿女的一生忠告的思维导图,以代码格式输出”。 生成后&#xff0…

teleport堡垒机的一些问题

teleport文件下载,将teleport服务映射到公网,权限已经分派好了,但无法ssh,这是什么原因呢? 注意teleport助手的版本要跟部署的是一致的,否则会检测不到状态 出现下面的问题,应该还是在防火墙的端…

奇舞周刊第496期:ChatGPT 的工作原理,这篇文章说清楚了!

记得点击文章末尾的“ 阅读原文 ”查看哟~ 下面先一起看下本期周刊 摘要 吧~ 奇舞推荐 ■ ■ ■ ChatGPT 的工作原理,这篇文章说清楚了! ChatGPT 能够自动生成一些读起来表面上甚至像人写的文字的东西,这非常了不起,而且出乎意料。…

DM3E,雷赛步进驱动器

0x6040: 0x6041: 状态流: 0x60608; //设置伺服模式 8CSP,6回零模式,3速度模式6040流: 00初始》06上电》07使能》0F待命(可操作) 快停流: 02快停》0F命令生效 参数保…

Vue全家桶(三):Vuex状态管理(State、Getters、Mutations、Actions)

目录 Vuex1. 理解Vuex1.1 组件之间共享数据的方式1.2 Vuex是什么1.2 什么时候使用Vuex1.3 Vuex的工作原理图 2 使用Vuex2.1 搭建Vuex环境 2.2 Vuex基本使用2.2.1 State2.2.2 Getters2.2.3 Mutations2.2.4 Actions2.2.5 Modules 模块化命名空间 3 求和案例3.1 使用纯vue编写3.2 …

Property ‘code‘ does not exist on type ‘AxiosResponse<any, any>‘ 的解决办法

原文链接 : Property ‘xxx’ does not exist on type ‘AxiosResponse<any, any>’ 的解决办法 vue3 ts 中 调用接口时&#xff1a; const loginOut () > {loginOutApi().then(res > {const { code } resif(code 0){ }})}报了如下错误&#xff1a; Property…

Python基础(3)——PyCharm介绍

Python基础&#xff08;3&#xff09;——PyCharm介绍 文章目录 Python基础&#xff08;3&#xff09;——PyCharm介绍课程目标一. PyCharm的作用二. 下载和安装2.1 下载2.2 安装 三. PyCharm基本使用3.1 新建项目3.2 新建文件并书写代码3.3 运行文件 四. PyCharm的基本设置4.1…