【Linux篇】Shell脚本语法< 3 >

简介: 在安卓源码里,离不开两个东西,一个就是.sh文件,还有一个就是.mk文件。这两个文件各持有一个语法,一个是Makefile语法,一个是Shell脚本语法。这两个是真的让我头疼,就像看天书一样,呜呜呜。

7、函数


linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。

所有函数在使用前必须定义。这意味着必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用。调用函数仅使用其函数名即可。


1)函数返回值

funWithReturn(){
    echo "这个函数会对输入的两个数字进行相加运算..."
    echo "输入第一个数字: "
    read aNum
    echo "输入第二个数字: "
    read anotherNum
    echo "两个数字分别为 $aNum 和 $anotherNum !"
    return $(($aNum+$anotherNum))
}
funWithReturn
echo "输入的两个数字之和为 $? !"


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


2)带参函数

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


注意:$10不能获取第十个参数,获取第十个参数需要$10。当n>=10时,需要使用${n}来获取参数。



8、输入输出重定向


就是把文件内容搞过来,或者搞过去。


1)输出重定向


把乌鸡哥三个字放到这个77.txt文件中

$ echo "乌鸡哥" > 77.txt


2)输入重定向

wc -l < 文件名


其中,wc 是一个统计文本信息的命令,-l 参数表示只统计行数。< 符号表示将文件内容作为输入传入到命令中。

因此,执行这个命令后,它会读取文件 “users” 的内容,并统计其中的行数,然后输出结果。这个命令在 Unix 或 Linux 环境下经常用于查看文件的行数。



sort < input.txt > output.txt


input.txt读取文件,然后用sort排序,最后排完了再输出到output.txt



3)特殊重定向


● 标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。

标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。

标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。


ls /mnt 2>> log.txt


这个命令尝试列出 /mnt 目录中的内容。如果操作成功,则结果将直接打印到终端上;但是,如果操作失败,命令将记录相关错误信息,把错误信息通过追加的方式写入到 log.txt 文件中。当您想要获取输出并将其保存在文件中时,这种重定向技术特别有用。


ls /mnt > output.txt 2>&1


这个命令尝试列出 /mnt 目录中所有的内容。如果目录可以访问,则命令将把结果列表格式输出到 output.txt 文件中,不论这些结果是标准输出还是标准错误输出。如果存在任何错误或警告信息,则它们也将被重定向到该文件中,使您可以轻松快速地查看所有输出。注意,在使用此语法时,请确保您有足够的权限来访问输入和输出文件,并且不会覆盖或修改意外文件。



4)Here Document


Here Document 是一种在 Bash/Shell 脚本中用于向命令提供输入的语法。它允许您指定一个“限定词”(也称为分界符),然后在该分界符下方的多行文本将作为命令的标准输入进行处理。

在脚本中,Here Document 语法通常采用以下形式:

command <<LIMITER
input text
...
LIMITER


其中:

command 表示要接收 Here Document 作为输入的命令。


<< 符号用于指定 Here Document 分界符,并将其留空以让 Shell 可以自动选择默认值。


LIMITER 是由用户指定的分界符,用于隔离输入文本并告诉 Shell 在何时停止读取标准输入。


input text 是最终传递给命令作为标准输入的多行文本。


注意,分界符必须从第一列开始,因此不能缩进 Here Document 中的文本。另外,当您需要在输入文本中使用变量或其他 Bash 命令时,可以在限定词前加上一个“-”符号,例如 <<-LIMITER,这会告诉 Shell 忽略输入文本中的缩进(就像 Bash 中的 heredoc 标记)。

例如,以下是一个使用 Here Document 语法的示例:

cat <<END
This is some example text that will be passed
as standard input to the cat command.
It can contain multiple lines.
END


这将创建一个名为 END 的分界符(END也可以换成pp啥都可以),并将三行文本作为标准输入传递给 cat 命令。最终,命令会将输入文本作为输出打印到终端上。



5)/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> 是一体的时候才表示错误输出。



9、文件包含(引用)

和C语言差不多,也可以引用其他.sh脚本里面的函数、变量等等。


. filename   # 注意点号(.)和文件名中间有一空格
source filename


创建两个 shell 脚本文件


A.sh文件

#!/bin/bash
name="乌鸡哥"


B.sh文件

#!/bin/bash
#使用 . 号来引用test1.sh 文件
. ./test1.sh
# 或者使用以下包含文件代码
# source ./test1.sh
echo "${name}"


$ chmod +x B.sh

$ ./B.sh

乌鸡哥

被包含的文件 A.sh 不需要可执行权限。


目录
相关文章
|
29天前
|
Shell
一个用于添加/删除定时任务的shell脚本
一个用于添加/删除定时任务的shell脚本
70 1
|
15天前
|
Shell Linux 测试技术
6种方法打造出色的Shell脚本
6种方法打造出色的Shell脚本
38 2
6种方法打造出色的Shell脚本
|
1天前
|
XML JSON 监控
Shell脚本要点和难点以及具体应用和优缺点介绍
Shell脚本在系统管理和自动化任务中扮演着重要角色。尽管存在调试困难、可读性差等问题,但其简洁高效、易于学习和强大的功能使其在许多场景中不可或缺。通过掌握Shell脚本的基本语法、常用命令和函数,并了解其优缺点,开发者可以编写出高效的脚本来完成各种任务,提高工作效率。希望本文能为您在Shell脚本编写和应用中提供有价值的参考和指导。
9 1
|
6天前
|
Ubuntu Shell 开发工具
ubuntu/debian shell 脚本自动配置 gitea git 仓库
这是一个自动配置 Gitea Git 仓库的 Shell 脚本,支持 Ubuntu 20+ 和 Debian 12+ 系统。脚本会创建必要的目录、下载并安装 Gitea,创建 Gitea 用户和服务,确保 Gitea 在系统启动时自动运行。用户可以选择从官方或小绿叶技术博客下载安装包。
19 2
|
12天前
|
Ubuntu Linux Shell
Linux 系统中的代码类型或脚本类型内容
在 Linux 系统中,代码类型多样,包括 Shell 脚本、配置文件、网络配置、命令行工具和 Cron 定时任务。这些代码类型广泛应用于系统管理、自动化操作、网络配置和定期任务,掌握它们能显著提高系统管理和开发的效率。
|
1月前
|
Web App开发 网络协议 Linux
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
这篇文章是关于Linux命令的总结,涵盖了从基础操作到网络配置等多个方面的命令及其使用方法。
61 1
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
|
20天前
|
监控 网络协议 Shell
ip和ip网段攻击拦截系统-绿叶结界防火墙系统shell脚本
这是一个名为“小绿叶技术博客扫段攻击拦截系统”的Bash脚本,用于监控和拦截TCP攻击。通过抓取网络数据包监控可疑IP,并利用iptables和firewalld防火墙规则对这些IP进行拦截。同时,该系统能够查询数据库中的白名单,确保合法IP不受影响。此外,它还具备日志记录功能,以便于后续分析和审计。
41 6
|
16天前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
1月前
|
运维 Java Linux
【运维基础知识】Linux服务器下手写启停Java程序脚本start.sh stop.sh及详细说明
### 启动Java程序脚本 `start.sh` 此脚本用于启动一个Java程序,设置JVM字符集为GBK,最大堆内存为3000M,并将程序的日志输出到`output.log`文件中,同时在后台运行。 ### 停止Java程序脚本 `stop.sh` 此脚本用于停止指定名称的服务(如`QuoteServer`),通过查找并终止该服务的Java进程,输出操作结果以确认是否成功。
34 1
|
1月前
|
存储 Shell Linux
【Linux】shell基础,shell脚本
Shell脚本是Linux系统管理和自动化任务的重要工具,掌握其基础及进阶用法能显著提升工作效率。从简单的命令序列到复杂的逻辑控制和功能封装,Shell脚本展现了强大的灵活性和实用性。不断实践和探索,将使您更加熟练地运用Shell脚本解决各种实际问题
23 0