shell语法总结二(持续补充)

news2025/4/9 4:50:43

在这里插入图片描述


文章目录

  • 一、函数
    • 1、函数的定义格式
    • 2、案例1
    • 3、案例2
  • 二、函数参数
  • 三、输入/输出重定向
    • 1、标准输入输出
    • 2、输出重定向:
      • 2.1、语法如下所示:
      • 2.2、案例:输出重定向会覆盖文件内容,请看下面的例子:
      • 2.3、如果不希望文件内容被覆盖,可以使用 >> 追加到文件末尾,例如:
    • 3、输入重定向
      • 3.1、统计 users 文件的行数
      • 3.2、将输入重定向到 users 文件
    • 4、/dev/null 文件
  • 四、文件名扩展
    • 1、?:代表文件路劲里面的任意单个字符串,不包含空字符串
      • 案例1:查找当前目录下,以sh结尾并且文件名只包含2个字符
    • 2、* :代表路径中任意数量的任意字符,包括0个字符
      • 案例2:输出后缀为.sh的文件
    • 3、[]:扩展形式是[...],扩展为括号之中的任意一个字符,
      • 案例3、查找当前目录下,文件名包含a或者b的文件
      • 案例4、查找当前目录下,文件名第2个字符不是a,并且以sh结尾的文件

一、函数

1、函数的定义格式

[ function ] funname [()]
{
	action;
	[return int;]

}

说明:

1、可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
2、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255)

2、案例1

#!/bin/bash
show_info()
{
        echo -e "$HOME"
        echo -e "$PWD"
        echo -e "$(date)"       
}
show_info

function show_info1()
{
        echo -e "$HOME"
        echo -e "$PWD"
        echo -e "$(date)"

}
show_info1

3、案例2

#!/bin/bash
funwithReturn(){
        echo "函数实现了两个数的相加功能"
        echo "输入的第一个数为:"
        read num1
        echo "输入的第二个数为:"
        read num2
        echo "两个数分别为$num1$num2"
        return $[$num1+$num2]

}
funwithReturn
echo "输入的两个数字之和为:$?"

执行结果

ubuntu@VM-24-12-ubuntu:~/20221212$ bash func1.sh 
函数实现了两个数的相加功能
输入的第一个数为:
10
输入的第二个数为:
10
两个数分别为10和10
输入的两个数字之和为:20

函数返回值在调用该函数后通过 $? 来获得。

注意:所有函数在使用前必须定义。这意味着必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用。调用函数仅使用其函数名即可。
shell脚本使用 bash 脚本名称 的方式执行的时候 本身不需要有可执行权限
但是直接执行 ./脚本名称执行的时候,需要可执行权限。

二、函数参数

$# 传递到脚本或函数的参数个数
$* 以一个单字符串显示所有向脚本传递的参数
$@$*相同,但是使用时加引号,并在引号中返回每个参数。
$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

#!/bin/bash
funWithParam(){
            echo "第一个参数为 $1 !"
            echo "第二个参数为 $2 !"
            echo "第十个参数为 $10 !"
            echo "第十个参数为 ${10} !"
            echo "第十一个参数为 ${11} !"
            echo "参数总数有 $# 个!"
            echo "作为一个字符串输出所有参数 $* !"
    }               

funWithParam 1 2 3 4 5 6 7 8 9 34 73

执行结果:

ubuntu@VM-24-12-ubuntu:~/20221212$ bash func2.sh 
第一个参数为 1 !
第二个参数为 2 !
第十个参数为 10 !
第十个参数为 34 !
第十一个参数为 73 !
参数总数有 11 个!
作为一个字符串输出所有参数 1 2 3 4 5 6 7 8 9 34 73 !

三、输入/输出重定向

1、标准输入输出

一般情况下,每个Unix/Linux命令运行的时候,都会打开三个文件:

标准输入文件(stdin):文件描述符0,stdin就是控制台输入
标准输出文件(stdout):文件描述符1,stdout就是控制台输出
标准错误文件(stderr):控制台也会读取stderr的错误信息

2、输出重定向:

一般通过在命令间插入特定的符号来实现。

2.1、语法如下所示:

command1 > file1

特别注意:

上面这个命令执行command1然后将输出的内容存入file1。
注意任何file1内的已经存在的内容将被新内容替代。如果要将新内容添加在文件末尾,请使用>>操作符。

2.2、案例:输出重定向会覆盖文件内容,请看下面的例子:

ubuntu@VM-24-12-ubuntu:~/20221212$ echo "今天要加油吖~" > time

ubuntu@VM-24-12-ubuntu:~/20221212$ cat time
今天要加油吖~

2.3、如果不希望文件内容被覆盖,可以使用 >> 追加到文件末尾,例如:

ubuntu@VM-24-12-ubuntu:~/20221212$ echo "2022-12-13" >> time
ubuntu@VM-24-12-ubuntu:~/20221212$ cat time
今天要加油吖~
2022-12-13

3、输入重定向

语法为:

command1 < file1

这样,本来需要从键盘获取输入的命令会转移到文件读取内容。
注意:输出重定向是大于号(>),输入重定向是小于号(<)。

3.1、统计 users 文件的行数

ubuntu@VM-24-12-ubuntu:~/20221212$ wc -l test1.sh 
8 test1.sh

3.2、将输入重定向到 users 文件

ubuntu@VM-24-12-ubuntu:~/20221212$ wc -l < test1.sh 
8

注意:上面两个例子的结果不同:第一个例子,会输出文件名;第二个不会,因为它仅仅知道从标准输入读取内容。。

4、/dev/null 文件

如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到 /dev/null:

/dev/null 是一个特殊的文件,写入到它的内容都会被丢弃;如果尝试从该文件读取内容,那么什么也读不到。但是 /dev/null 文件非常有用,将命令的输出重定向到它,会起到"禁止输出"的效果。

$ command > /dev/null		屏蔽标准输出
$ command &> /dev/null		屏蔽标准错误输出

四、文件名扩展

1、?:代表文件路劲里面的任意单个字符串,不包含空字符串

案例1:查找当前目录下,以sh结尾并且文件名只包含2个字符

ubuntu@VM-24-12-ubuntu:~/20221212$ ls ??.sh
if.sh

2、* :代表路径中任意数量的任意字符,包括0个字符

案例2:输出后缀为.sh的文件

ubuntu@VM-24-12-ubuntu:~/20221212$ ls *.sh
break.sh  case.sh  for.sh  func1.sh  func2.sh  func.sh  if.sh  test1.sh  test2.sh  while.sh

要注意的是:*不会匹配隐藏文件
如果要匹配隐藏文件 ls .*

ubuntu@VM-24-12-ubuntu:~/20221212$ ls .*
.:
break.sh  for.sh    func2.sh  if.sh   test1.sh  time.txt  while.sh
case.sh   func1.sh  func.sh   myfile  test2.sh  users

..:
20221212

3、[]:扩展形式是[…],扩展为括号之中的任意一个字符,

比如[aeiou]可以匹配5个元音字母中的任意一个

案例3、查找当前目录下,文件名包含a或者b的文件

ubuntu@VM-24-12-ubuntu:~/20221212$ ls *[ab]*.sh
break.sh  case.sh

方括号扩展还可以有两种变体
[^…]和[!..]表示不匹配方括号里面的字符,两种写法是等价的

案例4、查找当前目录下,文件名第2个字符不是a,并且以sh结尾的文件

ubuntu@VM-24-12-ubuntu:~/20221212$ ls ?[!a]*.sh
break.sh  for.sh  func1.sh  func2.sh  func.sh  if.sh  test1.sh  test2.sh  while.sh

在这里插入图片描述

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

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

相关文章

不同时期土地政策

土地政策​ 本篇文章主要总结新中国近代以来的土地政策&#xff0c;根据中国共产党的建立的前后时间分为两个部分。建党前主要是太平天国的《天朝田亩制》、孙中山的“旧三民主义”和新三民主义&#xff0c;建党后的大革命时期、土地革命时期、抗日战争、解放战争、新中国成立初…

Java中判断字符串是否为空

文章目录0 写在前面1 字符串.isEmpty2 .equals(字符串)3 字符串.length()>0注意事项0 写在前面 isEmpty(); "".equals(); .lenth()>01 字符串.isEmpty 这个方法是比较常用的&#xff0c; 格式&#xff1a;字符串.isEmpty();结果为true代表字符串为空&#xf…

5个超酷的Python学习工具,不看后悔。

工欲善其事必先利其器&#xff0c;一个好的工具能让起到事半功倍的效果&#xff0c;Python社区提供了足够多的优秀工具来帮助开发者更方便的实现某些想法&#xff0c;下面这几个工具给我的工作也带来了很多便利&#xff0c;推荐给追求美好事物的你。 Python Tutor Python Tut…

已解决json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

已解决raise JSONDecodeError(“Expecting value”, s, err.value) from None json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0) 文章目录报错代码报错翻译报错原因解决方法帮忙解决报错代码 粉丝群一个小伙伴想用Python读取json报错&#xff0c;但是…

Anaconda和Python的安装源配置

Anaconda安装&#xff1a; https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda换源&#xff1a; 清华anaconda镜像&#xff1a; conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels https://…

计算机系统实验-BufLab

一.实验题目及目的 1.实验题目 程序运行在linux环境中&#xff0c;从输入获得一个字符串&#xff0c;将这个字符串放入指定的buf处&#xff0c;buf的大小为32&#xff0c;需要分析栈帧、buf位置等信息&#xff0c;通过输入字符串使缓冲区溢出&#xff0c;完成指定的函数调用等…

聊聊什么是gRPC

前言 现如今&#xff0c;微服务变得越来越流行&#xff0c;而服务间的通信也变得越来越重要&#xff0c;服务间通信本质是交换信息&#xff0c;而交换信息的中介/桥梁正是我们的API。 诚然&#xff0c;目前构建API最受欢迎的仍然是使用Restful&#xff08;HTTP-JSON&#xff…

我学Python的那段日子(一)变量和简单数据类型

1.Python中的变量和简单数据类型&#xff08;一&#xff09; 1.1关于Python中的输出函数 使用 print()如&#xff1a; print("Hello,Python");在ide中显示的结果为 1.2 Python中的变量 所谓的变量即是可以用来保存数据的一个参数&#xff0c;变量的值是可变的。…

最短木板长度 华为OD真题 100

import java.util.Scanner; import java.util.*; import java.util.stream.Collectors;class Main {public static int min_num;public static void main(String[] args) {// 处理输入Scanner in new Scanner(System.in);int n in.nextInt();int m in.nextInt();in.nextLine…

小蓝本 第一本 《因式分解技巧》 第七章 综合运用 笔记 (第七天)

小蓝本 第一本 《因式分解技巧》 第七章 综合运用 笔记 &#xff08;第七天&#xff09;前言换元法好题例2题目解法经验补充例3题目解法经验例5题目解法补充例9题目解法经验补充例10题目解法补充例11题目解法补充例13题目解法习题7题目题解错题题号改错前言 12天攻掉《因式分解…

【笔记】计算机组成原理复习重点——篇1

计算机组成原理复习重点笔记 计算机组成原理计算机体系结构 学科基础必修课 研究生入学考试全国联考45分&#xff0c;占比30% 64学时&#xff0c;4学分&#xff0c;上课56&#xff0c;实验8 教材&#xff1a;计算机组成原理(第二版 ) 唐朔飞 高等教育出版社 目录 第1篇 概论 第…

如何确保RabbitMQ消息的可靠性?

开启生产者确认机制&#xff0c;确保生产者的消息能到达队列 开启持久化功能&#xff0c;确保消息未消费前在队列中不会丢失 开启消费者确认机制为auto&#xff0c;由spring确认消息处理成功后完成ack 开启消费者失败重试机制&#xff0c;并设置MessageRecoverer&#xff0c…

前端框架搭建(二)导入静态资源【vite】

1.根目录下创建styles目录 这里可根据你项目中的样式文件类型创建&#xff0c;因为这里我只有一个css没有scss 2.css目录下创建如下文件 global.css&#xff1a;全局所有的样式入口scrollbar.css&#xff1a;滚动条样式transition.css&#xff1a;动画样式 global.css impo…

Web3中文|盘点进军Web3的国际著名体育联盟

纵观如今的文化娱乐业&#xff0c;体育是最适合利用NFT实现粉丝参与和互动的领域。 NFT可以定格体育迷最喜欢的赛场高光时刻、记录体育迷所支持的球队或球星的美好瞬间&#xff0c;体育迷甚至还可以通过NFT体验交易收藏品的乐趣。 想知道这是怎么回事吗&#xff1f;让我们来粗…

查询 Linux 命令属于哪个软件包

在 Linux 中&#xff0c;有些命令的名称软件包的名称是不一样的&#xff0c;或者一个软件包中包含有多个命令。有时候&#xff0c;我们需要确定某个命令来自于哪个软件包&#xff0c;以便于可以在其他机器上安装&#xff0c;或者寻找该软件包的源代码进行编译或者修改。 下面以…

达美乐披萨:一家把自己“送”上市的企业

一、公司简介 达势股份&#xff0c;是知名披萨品牌在中国大陆、中国香港特别行政区和中国澳门特别行政区的独家总特许经营商&#xff0c;截至日前&#xff0c;公司在中国大陆14个城市拥有569家直营门店。 二、基本面分析 2.1 财务数据&#xff0c;扩张与亏损并存 **营收方面&a…

Sa-Token浅谈

主要介绍Sa-Token的鉴权使用以及实现原理。 文章目录简介使用源码解释创建会话1.前置检查2.获取配置3.分配token4.获取 User-Session5.设置token-id映射关系6.登录成功事件发布7.检查会话数量客户端注入Token简介 官网介绍的非常详细&#xff0c;主要突出这是一个轻量级鉴权框…

23个常见的 JavaScript 函数

本文收集了23个日常开发中非常常用的功能&#xff0c;其中一些可能很复杂&#xff0c;另一些可能很简单&#xff0c;但我相信它们都会或多或少对每个人都有帮助。 01、生成随机颜色 当网站需要生成随机颜色时&#xff0c;我们可以通过以下代码来执行此操作。 02、数组重新排序…

文件包含漏洞包含日志文件获取Shell实战

今天继续给大家介绍渗透测试相关知识&#xff0c;本文主要内容是文件包含漏洞包含日志文件获取Shell实战。 免责声明&#xff1a; 本文所介绍的内容仅做学习交流使用&#xff0c;严禁利用文中技术进行非法行为&#xff0c;否则造成一切严重后果自负&#xff01; 再次强调&#…

Vue渲染器(四):双端diff算法

渲染器&#xff08;四&#xff09;&#xff1a;双端diff算法 在上一章中&#xff0c;我们介绍了简单diff算法的实现原理。它利用vnode的key属性&#xff0c;尽可能多地复用DOM&#xff0c;并通过移动DOM的方式来完成更新&#xff0c;从而减少不断地创建和销毁DOM元素带来的性能…