shell程序设计入门(三)

news2024/11/16 7:49:41

shell程序设计入门(三)

  • 导语
  • 命令
    • 简单命令
      • break
      • :命令
      • continue
      • echo
      • eval
      • exec
      • exit
      • expr
      • printf
      • return
      • shift
    • 复杂指令
      • .
      • export
      • set
      • unset
      • trap
      • find
      • grep
  • 总结
  • 参考文献

导语

本篇介绍一些shell中常用的复杂命令及其使用,如set、echo、expr等命令

命令

简单命令

break

shell中的break和C语言中的break起到的作用一样,都是跳出当前循环或者判断

for file in *
do
	if [ -f "$file" ];then
		break;
	fi
done

:命令

冒号命令是一个空命令,用于简化条件逻辑,等同于true,运行比true快,也就是可以可用while :来进行死循环

:也被用在变量的条件设置中,如下

: ${var:=value}

意思是:如果 var 没有被定义或者为空,则将 var 设为 value,否则var不变

这行命令放在C语言中的实现类似于

var=var?var:value;

continue

和C语言中的意义一样,都是跳过当前循环,直接进入下一次循环

echo

echo是最简单的输出语句,可以通过添加参数来删去换行符

echo -n "aaa"
echo -e "aaa\c"

两种命令用了不同的参数,但实现的效果是一样的,后者确保启用了转义字符(\c是去掉换行符)

在这里插入图片描述

eval

eval允许对参数求值,这样将表达式从字符串中解放出来,它有点像一个额外$,给出一个变量的值的值

exec

exec很少用,这里直接给出书上的解释

在这里插入图片描述

exit

exit很简单,将脚本以退出码n结束运行,0认为是成功,其他的数字在Linux中各有含义,通过捕获退出码可以查看脚本出现了什么问题

expr

expr和eval有类似的地方,它们都是得到值,但是expr是将参数作为表达式来求值,并且expr支持的表达式更多,而eval只支持单个的参数

x='expr $x + 1'
x=$(expr $x +1)
#两者都实现了x++

printf

shell的printf使用和C语言的使用大部分都重合,区别是前者不支持浮点数,并且输出的时候不带括号和逗号,只用空格分开

printf "%d" 15

return

与C语言相同,return起到返回函数的返回值的作用,但是shell中的return和exit大不一样,前者的对象是函数,后者的对象是整个脚本程序,并且后者的返回值会被捕获作为错误码

shift

shift把参数列表中所有的参数左移一个位置,除了$0,也就是1234变成了234,后者取代了前者的位置。如果shift -n,那么就相当于参数列表整体左移多少单位,shift会影响到$*等变量

复杂指令

.

.用于在当前shell中执行命令,它的作用类似于C语言中的include,在使用.的时候,执行脚本列出的命令,使用的是与当前脚本程序一样的shell

书上给出的具体论述如下

在这里插入图片描述
简单来说,.命令使得脚本相互调用的时候可以操作共同的“全局变量”

export

export将自己的参数作为新的参数导入到子shell当中,实现方式是把参数列为环境变量(类似C语言全局变量),其他的子shell都可以用,具体例子和结果如下

#!/bin/sh
#export2

echo "$foo"
echo "$bar"
#!/bin/sh
#export1

foo="没有加上export前"
export bar="加上export后"

/bin/sh export2

在这里插入图片描述

可以看到导出的bar作为了export2的参数

set

set为shell设置参数变量,一般来说,shell命令的输出结果是空格分割的值域(如ls的每行输出有用户名,访问权限,时间等),这个时候就可以通过set拿到输出的某个值域,前提是知道值域的名字或位置,下面是一个简单的输出年份的例子

echo the date is $(date)
set $(date)#拿到date命令的输出
echo $1
exit 0

在这里插入图片描述

准确来说,date命令的结果成为了参数列表,然后$1取参数列表的第1个数值

这里是set的简单用法,set加上各种参数还有更多复杂的用法

unset

与set相反,unset就是从环境中删除变量和函数,对象是用户自己定义的变量和函数,不能是shell的,下面是一个简单的例子,可以看到变量被删除了,需要注意的是,直接对f赋值f还是存在的,但是使用unset,f就不存在了

f="1111 222"
echo $f

unset f
echo $f

在这里插入图片描述

trap

trap用于设定接受信号后进行的动作,有点类似QT槽的概念,在使用的时候会设定好一个待接收的型号,然后如果程序运行时在交互中出现了对应信号,trap就会执行对应的动作,trap有两个参数,一个是收到信号后采取的行动,另一个是要处理的信号名字,下面是书上给出的例子

#!/bin/bash

trap 'rm -f /tmp/my_tmp_file_$$' INT# INT是中断
echo creating file /tmp/my_tmp_file_$$
date >  /tmp/my_tmp_file_$$

echo "press interrupt (CTRL-C) to interrupt ...."
while [ -f /tmp/my_tmp_file_$$ ]; do
    echo File exists
    sleep 1
done
echo The file no longer exists

trap INT
echo creating file /tmp/my_tmp_file_$$
date >  /tmp/my_tmp_file_$$

echo "press interrupt (control-C) to interrupt ...."
while [ -f /tmp/my_tmp_file_$$ ]; do
    echo File exists
    sleep 1
done

结果如下

在这里插入图片描述

这里直接给出书上的解释

在这里插入图片描述

find

用于搜索文件的命令,有很多参数,它的语法格式如下

find [path] [options] [tests] [actions]

几个参数分别是路径,选项(如depth,follow),测试(添加的文件判断,如type c,user username),动作(如print、ls),具体见书或手册

以下面这个命令及其结果为例

find . -newer signal_deal -type f -exec ls -l {} \;

在这里插入图片描述

这里说明一下命令的意思,-newer signal_deal意思是,搜索的文件要比signal_deal要新,-type f意思是搜索的文件需要是普通文件,-exec ls -l {} ;意思是对搜索结果执行ls -l的动作,总的来说,该命令的意思就是搜索当前目录下的所有文件,找到其中比signal_deal新且是普通文件的文件,并显示它们的详细信息

grep

grep的全称是通用正则表达式解析器,它用来在文件中搜索字符串,它通常和find结合起来使用,grep的使用格式如下,没有提供文件名的情况下,grep将以stdin作为输入

grep [options] PATTERN [FILES]

grep和正则表达式息息相关,这里不多描述,因为正则表达式的用法非常复杂多样,具体的见书上和册子,这里只给出书上一个例子并解析

grep -E [a-z]\{3\} unset_test

在这里插入图片描述

该命令在unset_test中找到全部由小写字母组成的长度不小于3的字符串

总结

本篇介绍了shell中的一些常用的命令以及对应的简单用法,并且对例子进行了实机操作和解析,但是这只能说是对shell命令的入门,具体的、更高级的使用需要更深入的学习

参考文献

  1. 《Linux程序设计(第4版)》

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

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

相关文章

【每日一题】【区间合并】【贪心 模拟】多米诺骨牌 牛客小白月赛99 E题 C++

牛客小白月赛99 E题 多米诺骨牌 题目背景 牛客小白月赛99 题目描述 样例 #1 样例输入 #1 3 6 1 1 1 1 3 2 1 4 3 2 7 9 11 6 2 1 1 1 3 2 1 4 3 2 7 9 11 5 4 1 4 1 1 2 1 2 3 6 8样例输出 #1 3 6 5做题思路 按照玩多米诺骨牌的方式。 先将多米诺骨牌按照骨牌位置从小…

ai伴学之“修图”

偶一张孩子专注的抓拍,通过与ai探讨修图心得让做图理念更完备。 (笔记模板由python脚本于2024年08月25日 18:23:49创建,本篇笔记适合喜欢搞图的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Free&#xff1a…

JAVA_10

JAVA_10 JAVA异常机制及bug追踪1. 异常 JAVA异常机制及bug追踪 1. 异常 英文:Exception 所谓异常处理,就是指程序在出现问题时依然可以正确的执行完。Java面向对象处理异常过程 抛出异常:在执行一个方法时,如果发生异常,则这个方法生成代表…

Layer-refined Graph Convolutional Networks for Recommendation【ICDE2023】

Layer-refined Graph Convolutional Networks for Recommendation 论文:https://arxiv.org/abs/2207.11088 源码:https://github.com/enoche/MMRec/blob/master/README.md 摘要 基于图卷积网络(GCN)的抽象推荐模型综合了用户-项目…

Chainlit接入FastGpt接口完美对接,实现全新的用户聊天界面

前言 由于fastgpt只提供了一个分享用的网页应用,网页访问地址没法自定义,虽然可以接入NextWeb/ChatGPT web等开源应用。但是如果我们想直接给客户应用,还需要客户去设置配置,里面还有很多我们不想展示给客户的东西怎么办&#xf…

# 利刃出鞘_Tomcat 核心原理解析(九)-- Tomcat 安全

利刃出鞘_Tomcat 核心原理解析(九)-- Tomcat 安全 一、Tomcat专题 - Tomcat安全 - 配置安全 1、 删除 tomcat 的 webapps 目录下的所有文件,禁用 tomcat 管理界面. 如下目录均可删除: D:\java-test\apache-tomcat-8.5.42-wind…

轻松实现PDF转图片!2024四大实用工具推荐!

有时候我们需要将PDF文件中的内容转换为图片格式,以便在不同的平台和设备上更好地展示和分享。"PDF转图片"这一需求催生了众多转换工具的出现,它们以高效、便捷的服务帮助用户轻松实现格式转换。 福昕PDF转换大师(365客户端&#…

JAVA Future类详解

在编程中,Java中的"Future"是一个接口,代表是作为主线程开辟的一个分支任务,处理耗时的业务,并且可以可以为主线程最终返回异步计算的结果。此外,它提供了检查计算是否完成,等待其完成&#xff0…

ISP 3A 算法:自动曝光(AE)中的平均亮度法详解

在自动曝光(AE)算法中,平均亮度法是一种经典且广泛应用的技术。它通过计算场景中所有像素的平均亮度来确定最佳曝光设置,从而保证图像的整体亮度处于适当的水平。尽管该方法相对简单,但它在AE算法中扮演着重要的角色&a…

仕考网:专科考公好考吗?有岗位吗?

2024年,国家公务员以及大多数省市的公务员考试接受至少拥有大专学历的考生。某些特定职位,例如上海市和北京市的岗位,可能要求考生必须持有本科或以上学历才能参与考试。 属于国家公务员考试、省直属单位、市直属单位以及中央直属单位的职位…

奥斯卡影后斯特里普和马丁肖特在最近的这次约会后再次引发热议

奥斯卡影后斯特里普和马丁肖特在最近的这次约会后再次引发热议 2024-08-24 00:00 发布于:河北省 自从梅丽尔斯特里普于 2023 年与相恋多年的丈夫分手以来,媒体对她的关注度只增不减。毕竟,这是好莱坞最著名的女演员 40 多年来第一次单身&…

手机投屏到电脑显示(Android -> win11)

文章目录 1.电脑安装“无线显示”功能2.系统->投影到此电脑3.手机进入无线投屏功能更 1.电脑安装“无线显示”功能 选择 “开始 ”> “设置 ”> “系统 > 投影到此 PC ”。 在 Add the ‘Wireless Display’ optional feature to project to this PC (…

ELK进阶-安全认证设置流程介绍

目录 一、前言 二、ElasticSearch的安全认证配置 设置ElasticSearch的安全认证功能(最低) 启用TLS/SSL加密通信 (1)生成CA证书 (2)生成transport证书 (3)生成http证书 &#…

小米汽车每台亏6万,背后的认知格局

最近,小米汽车传出一则新闻:一台车亏损了6万块钱。这则消息一出,遭到了同行车企负责人的谩骂,并对雷军进行了直接攻击。对方指责雷军:“你亏损6万块钱还卖车干什么?你就是因为不亏卖不掉,所以才…

宠物毛发不除对身体有什么危害?除毛好的小型空气净化器分享

身为呼吸科医生,我亲眼见证过不少因环境因素导致的呼吸问题。在享受养猫乐趣的同时,我也时刻关注着它们可能带来的健康隐患,尤其是毛发中的细菌问题。我发现,不少年轻人对宠物毛发可能携带的细菌威胁缺乏足够认识。今天&#xff0…

golang多版本管理工具g

一、golang多版本管理工具g 一)g简介 g是一个Linux、macOS、Windows下的命令行工具,可以提供一个便捷的多版本go环境的管理和切换 二)g特性 支持列出可供安装的go版本号支持列出已安装的go版本号支持在本地安装多个go版本支持卸载已安装的go…

数据缓存软件Redis推出Redis 8 这更改许可证后首个重大版本更新

2024 年 3 月流行的数据库缓存应用 Redis 宣布修改开源许可证,此次修改许可证的目的本质上就是避免大型云计算公司白嫖,例如亚马逊的 AWS 等。AWS 等云计算服务商基于 Redis 推出托管服务并向客户收费,作为开发商 Redis 并没有获得收益&#…

还没做过电子版招生简章的老师看过来!

随着科技的不断发展,传统的招生简章逐渐走向数字化,电子版招生简章以其便捷、环保、可更新等优势,越来越受到各学校的青睐。如果你还不会制作电子版招生简章,那就赶紧来看看这篇文章吧! 一、电子版招生简章的优势 1. …

【PHP入门教程】PHPStudy环境搭建+composer创建项目

文章目录 PHP 的历史PHP 的用途PHP 的特点和优势PHP 环境搭建环境准备安装window 安装CentOS / Ubuntu / Debian 安装 第一个Hello World使用Apache服务运行命令行运行代码 Composer安装 Composer:安装途中报错解决:初始化项目创建文件最终文件目录Compo…

记录练习reserve(强网先锋ADmingyue)

1.强网 64位无壳,ida拖入。 复制qiangwangxianfengjiushini到v6缓冲区,拷贝ZmxhZ3ttYWZha3VhaWxhaXFpYW5kYW9ifQ前36个字符(正好是36)到v5缓冲区,因为存在“”符号,应该是base64,下文for循环遍历v4与v5的每个字符(即解…