Shell编程 --函数语法与重定向

news2025/1/11 8:17:56

文章目录

  • Shell编程
  • shell函数
    • 语法
    • 函数参数
  • Shell 输入/输出重定向
    • 输出重定向
    • 输入重定向
    • 重定向深入讲解
    • /dev/null 文件
  • 总结

Shell编程

Shell是一种程序设计语言。作为命令语言,它交互式解释和执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。

shell函数

Shell函数包括Shell函数语法和函数参数。

语法

shell中函数的定义格式如下:

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

比如:

function fun1()
{
    echo "this is a function"
    return 257
}
#调用
fun1
# $? 用于接收返回值 返回值超过256取模
echo $?
----------------
this is a function
1
funNumPlus(){
    read -p "please inter a number:" num1
    read -p "please inter other number:" num2
    total=`expr $num1 + $num2`
    return $total
}

funNumPlus
echo "two numbers plus answer is $?"
-----------------
please inter a number:2
please inter other number:4
two numbers plus answer is 6

函数参数

在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数…

在这里插入图片描述

# 函数传参 返回值需要数字参数 函数调用后的第一个$? 是接收的函数返回值
func2(){
    total=`expr $1 + $2`
    echo $* $@ $#
    return $total
}

func2 $1 $2
echo function return $?
-------------------------- #传入值2 3
2 3 2 3 2
function return 5

Shell 输入/输出重定向

大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回到您的终端。一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端。同样,一个命令通常将其输出写入到标准输出,默认情况下,这也是你的终端。

重定向命令列表如下:

在这里插入图片描述

需要注意的是文件描述符 0 通常是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输(STDERR)。

输出重定向

重定向一般通过在命令间插入特定的符号来实现。特别的,这些符号的语法如下所示:

command1 > file1

上面这个命令执行command1然后将输出的内容存入file1。

注意任何file1内的已经存在的内容将被新内容替代。如果要将新内容添加在文件末尾,请使用>>操作符。

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

echo "方世恩" > users

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

输入重定向

和输出重定向一样,Unix 命令也可以从文件获取输入,语法为:

command1 < file1

这样,本来需要从键盘获取输入的命令会转移到文件读取内容。

注意:输出重定向是大于号(>),输入重定向是小于号(<)。

同时替换输入和输出,执行command1,从文件infile读取内容,然后将输出写入到outfile中。

command1 < infile > outfile

重定向深入讲解

  • 一般情况下,每个 Unix/Linux 命令运行时都会打开三个文件:
  1. 标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。
  2. 标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。
  3. 标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。
  • 默认情况下,command > file 将 stdout 重定向到 file,command < file 将stdin 重定向到 file。
  • 如果希望 stderr 重定向到 file,可以这样写:
$ command 2>file

如果希望 stderr 追加到 file 文件末尾,可以这样写:

$ command 2>>file
  • 表示标准错误文件(stderr)。

如果希望将 stdout 和 stderr 合并后重定向到 file,可以这样写:

$ command >file 2>&1
或
$ command >>file 2>&1

如果希望对 stdin 和 stdout 都重定向,可以这样写:

$ command < file1 >file2

command 命令将 stdin 重定向到 file1,将 stdout 重定向到 file2。

/dev/null 文件

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

$ command >/dev/null

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

如果希望屏蔽 stdout 和 stderr,可以这样写:

$ command >/dev/null 2>&1

注意:0 是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)。

这里的 2 和 > 之间不可以有空格,2> 是一体的时候才表示错误输出。

总结

本篇介绍了:

  1. Shell函数语法
  2. Shell 输入/输出重定向:文件描述符 0 通常是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输(STDERR)。

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

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

相关文章

Postman入门:环境变量和全局变量

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、发送请求 二、设置并引用环境变量 比如&#xff1a;我建的这个生产环境 使用环境有两个方式&#xff0c;一个是点击每个环境后面的对勾&#xff1b;另一种方式…

【Linux操作系统】进程的基本概念(PCB对象)详解

目录 一、进程的基本概念二、进程的描述组织&#xff08;PCB对象&#xff09;1.PCB的基本概念2.为什么要有PCB对象&#xff08;操作系统对进程的组织管理&#xff09;3.PCB对象的内部属性&#xff08;tast_struct结构体&#xff09; 三、查看进程1.ps指令2.top指令3.通过 /proc…

【LeetCode 1991 找到数组的中间位置 / LeetCode 724 寻找数组的中心下标】中间索引问题

1991 题目描述 暴力解法1&#xff1a; 思路&#xff1a; 遍历下标&#xff0c;求出左边和和右边和比较两边是否相等相等直接返回值没有符合的返回 -1 class Solution {public int findMiddleIndex(int[] nums) {int lennums.length;//初始化一个变量 midIndex 为 -1&#xff…

前端性能优化-script标签中的async与defer

前言 当浏览器解析 DOM 时候&#xff0c;遇到 script 标签时&#xff0c;会暂停 DOM 的解析&#xff0c;先加载并执行 script 中的代码&#xff0c;然后再继续 DOM 的解析。 比如 <script>window.env {version: "production",}; </script>上面的代码…

KVM——虚拟机添加设备与挂载磁盘

目录 一. 图形化方式添加设备 1. 添加磁盘 2. 添加网卡 二. 命令行形式添加设备 方式一&#xff1a; 方式二&#xff1a; 磁盘格式raw和qcow2 raw格式 qcow2格式 如何选择 挂载磁盘 一. 图形化方式添加设备 1. 添加磁盘 2. 添加网卡 先关机 给宿主机添加一块网…

华南理工大学-大学物理实验 迈克尔逊干涉仪

迈克尔逊干涉仪的调整与使用 引言 迈克尔逊( Albert Abrham Michelson, 1852-1931) , 著名的实验物理学家,近现代干涉仪的开山鼻祖。他设计了至今仍在广泛应用的迈克尔逊干涉仪。该仪器设计非常巧妙,测量极其精密,是近代许多干涉仪的基础。迈克尔逊当时设计该仪器的目的之…

HCIA复习 | HCIP基础

目录 Days01&#xff08;24.8.1&#xff09; IPv4 Header OSI七层模型 TCP、UDP数据结构 TCP/IP模型 OSI模型与TCP/IP模型区别 ARP Days02&#xff08;24.8.2&#xff09; 交换机 封装和解封装 IPv6 Header 路由 RIP Days01&#xff08;24.8.1&#xff09; IPv4 …

【面试题】【简历版】完整版

一、Java 基础 java 面向对象特性 封装&#xff08;Encapsulation&#xff09;&#xff1a; public class Student {// 将name和age封装起来private String name;private int age;// 提供方法设置和获取这些属性public void setName(String name){this.name name;}public Str…

JavaEE: 查看线程信息

示例用代码 public class Main {static class MyThread extends Thread {Overridepublic void run() {while (true) {System.out.println("hello thread");try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}}}public st…

基于Java+SpringBoot+Vue的网上超市的设计与实现

基于JavaSpringBootVue的网上超市的设计与实现 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f34…

canal监听mysql增量数据发布到rabbitmq

canal工作原理 canal 依靠mysql主从备份的原理&#xff0c;模拟 MySQL slave 的交互协议&#xff0c;伪装自己为 MySQL slave &#xff0c;向 MySQL master 发送dump 协议MySQL master 收到 dump 请求&#xff0c;开始推送 binary log 给 slave (即 canal )canal 解析 binary …

python模块01-pymysql数据库连接查询

PyMySQL 是用于连接 MySQL 服务器的一个库 1 安装&#xff1a; pip install pymysql 2 数据库连接 conn pymysql.connect(host"127.0.0.1",port3306,user"localhost",password"123456",charset"utf8",cursorclassDictCursor ) cur…

Redisson看门狗机制和mulitLock原理保姆级别

Redisson看门狗机制 这段代码主要实现了异步处理一个任务&#xff0c;并根据任务结果来执行不同的操作。 首先&#xff0c;调用handleNoSync方法进行异步处理&#xff0c;并返回一个表示异步计算结果的CompletionStage<Long>对象&#xff0c;这里使用了threadId和ttlRe…

mathtype7.8永久激活码下载并安装激活MathType7.8破解版

“我好像被数学公式PUA了……” 最近&#xff0c;有位朋友跟我吐槽&#xff1a;自己每次做数学题、写论文&#xff0c;只要遇到复杂的公式和符号&#xff0c;就会特别焦虑。她觉得&#xff0c;自己好像被数学公式PUA了。 “明明知道它很重要&#xff0c;但就是不想面对它。” 其…

[Git][多人协作][下]详细讲解

目录 1.不同分支下多人协作2.远程分⽀删除后&#xff0c;本地git branch -a依然能看到 1.不同分支下多人协作 ⼀般情况下&#xff0c;如果有多需求需要多⼈同时进⾏开发&#xff0c;是不会在⼀个分⽀上进⾏多⼈开发&#xff0c;⽽是⼀个需求或⼀个功能点就要创建⼀个feature分…

CSS技巧专栏:一日一例 19 -纯CSS实现超酷的水晶按钮特效

CSS技巧专栏:一日一例 19 -纯CSS实现超酷的水晶按钮特效 今天给大家分享一个纯CSS按钮水晶按钮,效果很赞,希望对大家有所帮助。 本例图片 案例分析 这个按钮看起来效果很赞,我们分析一下它由几个层组成: 1. 按钮本体:渐变层+按钮文字 2.用before伪元素实现高光层+内…

Visual Studio 和 Visual Studio Code 的比较与应用偏向

Visual Studio 和 Visual Studio Code&#xff08;VS Code&#xff09;是微软开发的两个不同的开发工具&#xff0c;各有特点和优势&#xff0c;适用于不同的开发需求。下面是详细的比较和在实际应用中的偏向。 功能和特性 Visual Studio 完整的IDE&#xff1a;支持多种编程…

reNgine:终极 Web 侦察和漏洞扫描器

reNgine 是一个针对 Web 应用程序的开源自动侦察框架&#xff0c;专注于高度可配置和简化的侦察过程。 reNgine 的开发是为了克服传统侦察工具的限制。它是漏洞赏金猎人、渗透测试人员和企业安全团队的不错选择&#xff0c;可以自动化和完善他们的信息收集流程。 reNgine 是作为…

LeetCode 热题 HOT 100 (019/100)【宇宙最简单版】[创作中]

【链表】No. 0142 环形链表 II【中等】&#x1f449;力扣对应题目指路 希望对你有帮助呀&#xff01;&#xff01;&#x1f49c;&#x1f49c; 如有更好理解的思路&#xff0c;欢迎大家留言补充 ~ 一起加油叭 &#x1f4a6; 欢迎关注、订阅专栏 【力扣详解】谢谢你的支持&#…

AutoGPT 最最最新安装教程

介绍 本指南将帮助您为项目设置服务器和构建器。 先决条件 要设置服务器&#xff0c;您需要安装以下内容&#xff1a; Node.jsPython 3.10 检查是否已安装 Node.js 和 Python 您可以通过运行以下命令来检查是否已安装 Node.js&#xff1a; node -v您可以通过运行以下命…