Shell 脚本编程保姆级教程(下)

七、Shell 流程控制

7.1 if

#!/bin/bash
num1=100
if test $[num1] == 100
thenecho 'num1 是 100'
fi

7.2 if else 

#!/bin/bash
num1=100
num2=100
if test $[num1] -eq $[num2]
thenecho '两个数相等!'
elseecho '两个数不相等!'
fi

7.3 if else-if else

#!/bin/bash
a=10
b=20
if [ $a == $b ]
thenecho "a 等于 b"
elif [ $a -gt $b ]
thenecho "a 大于 b"
elif [ $a -lt $b ]
thenecho "a 小于 b"
elseecho "没有符合的条件"
fi

7.4 for

#!/bin/bash
for loop in 1 2 3 4 5
doecho "The value is: $loop"
done

7.5 while

#!/bin/bash
int=1
while(( $int<=5 ))
doecho $intlet "int++"
done

7.6 until

#!/bin/bash
a=0
until [ ! $a -lt 10 ]
doecho $aa=`expr $a + 1`
done

7.7 case ... esac 

echo '输入 1 到 4 之间的数字:'
echo '你输入的数字为:'
read aNum
case $aNum in1)  echo '你选择了 1';;2)  echo '你选择了 2';;3)  echo '你选择了 3';;4)  echo '你选择了 4';;*)  echo '你没有输入 1 到 4 之间的数字';;
esac

7.8 break

break 命令允许跳出所有循环(终止执行后面的所有循环)

7.9 continue

continue 命令与 break 命令类似,只有一点差别,它不会跳出所有循环,仅仅跳出当前循环 

八、Shell 函数 

8.1 定义函数

#!/bin/bash
demoFun(){echo "这是我的第一个 shell 函数!"
}
echo "-----函数开始执行-----"
demoFun
echo "-----函数执行完毕-----"

8.2 函数参数

#!/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

九、Shell 输入/输出重定向

命令说明
command > file将输出重定向到 file。
command < file将输入重定向到 file。
command >> file将输出以追加的方式重定向到 file。
n > file将文件描述符为 n 的文件重定向到 file。
n >> file将文件描述符为 n 的文件以追加的方式重定向到 file。
n >& m将输出文件 m 和 n 合并。
n <& m将输入文件 m 和 n 合并。
<< tag将开始标记 tag 和结束标记 tag 之间的内容作为输入。

9.1 输出重定向 

注意:输出重定向会覆盖文件内容 

9.2 输入重定向 

9.3 重定向深入讲解

重定向符号

  • >:输出重定向,用于将命令的标准输出重定向到文件。会覆盖文件内容。
  • >>:追加重定向,用于将命令的标准输出追加到文件末尾。
  • <:输入重定向,用于将文件内容重定向为命令的标准输入。
  • 2>:错误重定向,用于将命令的标准错误重定向到文件。会覆盖文件内容。
  • 2>>:错误追加重定向,用于将命令的标准错误追加到文件末尾。
  • &>:将标准输出和标准错误一起重定向到文件。会覆盖文件内容。
  • &>>:将标准输出和标准错误一起追加到文件末尾。

文件描述符重定向

文件描述符是内核用来访问文件的引用。默认情况下:

  • 标准输入的文件描述符是 0
  • 标准输出的文件描述符是 1
  • 标准错误的文件描述符是 2

我们可以使用文件描述符进行更复杂的重定向操作。

[root@dan shell]# cat users who_is_the_best_in_the_world > output.txt 2> error.txt
[root@dan shell]# cat output.txt 
root     tty2         2024-06-27 17:24 (tty2)
root     pts/0        2024-06-27 17:28 (192.168.0.120)
root     pts/1        2024-06-28 12:22 (192.168.0.120)
Cao Licheng is the best in the world
[root@dan shell]# cat error.txt 
[root@dan shell]# cat users 666 > output.txt 2> error.txt
[root@dan shell]# cat error.txt 
cat: 666: No such file or directory
[root@dan shell]# 

第二次查询了一个不存在文件,并将错误输出到了 error.txt 文件中 

9.4 Here Document

Here文档是一种将多行字符串作为命令输入的方法,常用于脚本中 

cat << EOF
This is a here document.
It can contain multiple lines of text.
EOF

上述命令将多行文本作为 cat 命令的输入,EOF 是结束符,可以用其他字符串替换,但需要保持一致 

9.5 /dev/null 文件

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

$ command > /dev/null

十、Shell 文件包含

test2.sh 代码如下

#!/bin/bash
url="https://eclecticism.blog.csdn.net/"

test1.sh 代码如下

#!/bin/bash
source ./test2.sh # 或者 . ./test2.sh
echo "博客地址:${url}"

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

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

相关文章

电影APP——项目建议书参考

项目建议书 1. 前言1.1 实现目标1.2 项目应用范围1.3 项目名称 2. 概述2.1 国内外发展综述2.2 拟解决的问题2.2.1 业务问题2.2.2 技术需求 2.3 系统环境需求2.3.1 网络需求描述2.3.2 业务需求描述2.3.3 运行环境/用户描述 2.4 功能建议2.4.1应用场景描述2.4.2功能划分/功能模型…

数据仓库、数据湖的异同

数据仓库与数据湖&#xff0c;作为数据存储与管理的两大重要工具&#xff0c;各有其独特之处&#xff0c;同时也存在着一定的交集。在深入探讨这两者的异同之前&#xff0c;我们先来明确它们的核心定义与功能。 数据仓库&#xff0c;这一名词早已深入人心&#xff0c;其核心理…

性能之巅的巴比达内网穿透访问单位的web管理系统

在这个数字化飞速发展的时代&#xff0c;作为一名IT部门的小主管&#xff0c;我经常面临着一项挑战&#xff1a;如何在外网环境下高效、安全地访问我们单位内部部署的Web管理系统。这不仅仅是关乎我个人的工作效率&#xff0c;更是影响到整个团队能否快速响应市场需求的关键。直…

650V 1200V 碳化硅MOS TO247 封装 内阻30毫欧 40 80毫欧

650V 1200V 碳化硅MOS TO247 封装 内阻30毫欧 40 80毫欧

Python课后习题2

前面几章基础知识已经学完了检验一下自己吧 1.填空题 &#xff08;1&#xff09;在Python程序中&#xff0c;单行注释以&#xff08;&#xff09;开始 &#xff08;2&#xff09;标识符不能以&#xff08;&#xff09;开头 &#xff08;3&#xff09;导入random模块的两种方…

979. 在二叉树中分配硬币

Problem: 979. 在二叉树中分配硬币 文章目录 思路解题方法复杂度Code 思路 这道题目要求我们计算在给定的二叉树中&#xff0c;移动硬币使每个节点恰好有一个硬币所需的最小步数。每个节点的值表示该节点上的硬币数量&#xff0c;而我们的目标是通过移动硬币使得每个节点都恰好…

LangChain E-Mails with LLM

题意&#xff1a;通过LangChain使用大型语言模型&#xff08;LLM&#xff09;处理电子邮件 问题背景&#xff1a; I am quite new to LangChain and Python as im mainly doing C# but i am interested in using AI on my own data. So i wrote some python code using langch…

如何安装和卸载软件?

如何安装和卸载软件&#xff1f; &#x1f4bb; 如何安装和卸载软件&#xff1f;——默语的详细教程摘要引言正文内容&#x1f5a5;️ 在Windows上安装和卸载软件安装软件卸载软件 &#x1f34f; 在Mac上安装和卸载软件安装软件卸载软件 &#x1f914; QA环节&#x1f4dd; 表格…

数据结构和算法,单链表的实现(kotlin版)

数据结构和算法&#xff0c;单链表的实现(kotlin版) 1.定义接口&#xff0c;我们需要实现的方法 interface LinkedListAction<E> {fun push(e: E)fun size(): Intfun getValue(index: Int): E?fun insert(index: Int,e: E)fun remove(index: Int) }2.定义节点&#xf…

使用Java连接数据库并且执行数据库操作和创建用户登录图形化界面(2)

(1)在student数据库上创建一个用户表tb_account,该表包含用户id,用户名和密码。 字段名称 数据类型 注释 约束 user_id Char(8)

Redis+定式任务实现简易版消息队列

Redis是一个开源的内存中数据结构存储系统&#xff0c;通常被用作数据库、缓存和消息中间件。 Redis主要将数据存储在内存中&#xff0c;因此读写速度非常快。 支持不同的持久化方式&#xff0c;可以将内存中的数据定期写入磁盘&#xff0c;保证数据持久性。 redis本身就有自己…

C++容器使用详解---vector容器

文章目录 1.vector容器1.vector容器构造函数2.vector容器的赋值操作3.vector容器的容量和大小4.vector容器的插入和删除5.vector容器的数据存取6.vector容器互换容器7.vector容器预留空间 1.vector容器 std::vector是C标准模板库(STL)中的一个动态数组容器&#xff0c;其内部实…

QT QThread 线程类的使用及示例

QThread 是 Qt 框架提供的一个用于处理多线程的类&#xff0c;它允许开发者编写具有并发功能的应用程序&#xff0c;提高程序的响应速度、执行效率和用户体验。 在操作系统中&#xff0c;线程是进程内的执行单元&#xff0c;拥有独立的执行路径。每个线程有自己独立的栈空间&a…

从零开始学Spring Boot系列-集成Spring Security实现用户认证与授权

在Web应用程序中&#xff0c;安全性是一个至关重要的方面。Spring Security是Spring框架的一个子项目&#xff0c;用于提供安全访问控制的功能。通过集成Spring Security&#xff0c;我们可以轻松实现用户认证、授权、加密、会话管理等安全功能。本篇文章将指导大家从零开始&am…

Oracle day15

/*create table f0307 ( id number ,productname varchar2(100) ,parentid number); insert into f0307 values ( 1,汽车,null); insert into f0307 values ( 2,车身,1); insert into f0307 values ( 3,发动机,1); insert into f0307 values ( 4,车门,2); insert into f0307 va…

日期类(java)

文章目录 第一代日期类 Date常用构造方法SimpleDateFormat 日期格式化类日期转字符串&#xff08;String -> Date)字符串转日期 (String->Date) 第二代日期类 Calendar常用字段与如何得到实例对象相关 API 第三代日期类&#xff08;LocalDate\TIme)日期&#xff0c;时间&…

springboot + Vue前后端项目(第二十一记)

项目实战第二十一记 写在前面1. springboot文件默认传输限制2. 安装视频插件包命令3. 前台Video.vue4. 创建视频播放组件videoDetail.vue5. 路由6. 效果图总结写在最后 写在前面 本篇主要讲解系统集成视频播放插件 1. springboot文件默认传输限制 在application.yml文件中添…

pip安装neuralcoref失败ERROR

最终解决的方法如下&#xff1a; git clone https://github.com/huggingface/neuralcoref.git cd neuralcoref pip install -r requirements.txt python setup.py install 原始步骤&#xff1a; 安装 neuralcoref 的依赖&#xff1a; 安装编译 neuralcoref 所需的依赖项&am…

PHP If...Else 语句的深入解析

PHP If...Else 语句的深入解析 在PHP编程语言中&#xff0c;if...else 语句是一种基本且强大的控制结构&#xff0c;它允许根据特定条件执行不同的代码块。这种结构对于决策制定和流程控制至关重要&#xff0c;是每位PHP开发者必须熟练掌握的内容。本文将详细探讨if...else语句…

boost asio异步服务器(4)处理粘包

粘包的产生 当客户端发送多个数据包给服务器时&#xff0c;服务器底层的tcp接收缓冲区收到的数据为粘连在一起的。这种情况的产生通常是服务器端处理数据的速率不如客户端的发送速率的情况。比如&#xff1a;客户端1s内连续发送了两个hello world&#xff01;,服务器过了2s才接…