Linux Shell——函数的使用

文/一介书生,一枚码农。

scripts are for lazy people.

Linux Shell

函数是存在内存里的一组代码的命名的元素。函数创建于脚本运行环境之中,并且可以执行。
函数的语法结构为:

function <function-name> {<code to execute>
}

创建函数不需要dodone这些关键字,只需要大括号来界定函数的作用范围。
我们可以在命令行中创建一个简单的函数:

function show_system {echo "The uptime is:"uptimeechoecho "Current dir:"pwdechoecho "Date:"date
}

在命令行定义上面的函数:

function in command line

然后执行函数:

show_system

最后,我们可以使用type命令查看函数的定义:

type show_system

方法可以有传递的参数。在此之前,我们先简单介绍 sed命令,下面的脚本用来移除文件中的注释行和空白行。

sed -i.bak '/^\s*#/d;/^$/d' <filename>

详细介绍一下上面的脚本:

  • sed -i.bak:sed 命令会创建一个以.bak结尾的备份文件,用来备份原始的文件。
  • /^:表示行首。
  • \s*:匹配任何不可见字符,包括空格、制表符、换页符等。
  • #/:shell 脚本中的注释标记。/^\s*#/一起使用用来查找注释行和带有不可见字符的注释行。
  • d:用来删除匹配的行。
  • ;/^$/d;是表达式的分隔符,后面的表达式跟前面的表达式意思很像,用来删除空白行, "$"匹配输入字符串的结束位置。

我们把上面的脚本移到函数中,创建一个名为clean_file的函数:

function clean_file {sed -i.bak '/^\s*#/d;/^$/d' "$1"
}

上面的代码中,我们使用位置参数$1来接收命令行里传递的参数,需要注意的是$1 用大括号来括起来。

下面,我们完善clean_file方法,新建一个脚本文件 clean.sh。代码如下:

#!/bin/bash
# Script will prompt for filename
# And remove commented and blank linesfunction is_file {if [ ! -f "$1" ] ; thenecho "$1 does not seem to be a file"exit 2fi
}function clean_file {is_file "$1"BEFORE=$(wc -l "$1")echo "The file $1 starts with $BEFORE"sed -i.bak '/^\s*#/d;/^$/d' "$1"AFTER=$(wc -l "$1")echo "The file $1 is now $AFTER"
}read -p "Enter a file to clean: "
clean_file "$REPLY"
exit 1

其中,wc -l命令用来打印文件行数。
现在,我们新建一个用来测试的文件 test.txt,里面随便写些内容:

# This file is just for testing.Hello.World.# new comment.$The end.

在 test 文件所在的目录下,执行 clean.sh脚本:

clean.sh

然后查看 test 文件和 test.bak 文件,发现空白行和注释行已经删除。

cat test

这里需要注意的是,shell 脚本是从上至下来执行的,如果在一个函数中调用了另一个函数,那么被调用的函数要定义在调用函数的前面。

当然,除了函数可以传递参数外,还可以有返回值。默认情况下,在执行完函数内的最后一行代码后,方法会返回一个状态的数字,你可以使用$?变量来查看函数执行的状态。如果返回值为0,表示方法正常退出,非0表示程序发生错误或其他非正常退出。
我们使用return关键字来返回一个整数。这里需要注意两点:

  • 函数一旦执行完就会返回状态代码。
  • 状态代码的范围为0到255。

如果不想返回函数的状态代码,而是想返回一个字符串或是其他类型,可以使用 echo 变量的方式来返回值。

下面创建脚本文件 translate.sh,用来把文件中的大写字符转换为小写字符:

#!/bin/bash
# Script that translates upper letter to low letterfunction to_lower ()
{input="$1"output=$(tr '[A-Z]' '[a-z]' <<< "$input")echo $output
}while true
doread -p "Enter c to continue or q to exit: "result=$(to_lower $REPLY)echo "After translate: $result"if [ $result = "q" ] ; thenbreakfidone
echo "Finished"

代码会把输入的大写字符变成小写字符,当输入"Q"或"q"时程序退出。

转载于:https://www.cnblogs.com/IcanFixIt/p/6796453.html

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

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

相关文章

FFmpeg学习2:解码数据结构及函数总结

在上一篇文章中&#xff0c;对FFmpeg的视频解码过程做了一个总结。由于才接触FFmpeg&#xff0c;还是挺陌生的&#xff0c;这里就解码过程再做一个总结。本文的总结分为以下两个部分&#xff1a; 数据读取&#xff0c;主要关注在解码过程中所用到的FFmpeg中的结构体。解码过程中…

JavaFX 2 GameTutorial第4部分

介绍 这是与JavaFX 2游戏教程相关的六个部分系列的第四部分。 如果您错过了第1部分 &#xff0c; 第2部分或第3部分 &#xff0c;我建议您在开始本教程之前仔细阅读它们。 回顾一下&#xff0c;在第3部分中&#xff0c;我为您提供了许多经典街机风格游戏和所使用的不同输入设备…

java构造函数_JAVA的构造函数是怎么写的。万分感谢。路过的请不要嘲笑%_%

展开全部JAVA的构造函数是&#xff1a;SetLocal EnableDelayedExpansionset classpath.for %%c in (lib\*.jar) do set classpath!32313133353236313431303231363533e59b9ee7ad9431333431363030classpath!;%%cset classpath%classpath%;./classes;java com.ham.server.Server。…

C# 中winform的一些属性设置

1 窗体的大小固定住&#xff0c;不能调整其大小 窗体FormBorderStyle 属性设置为 FixedSingle; MaximizeBox 属性设置为false; MinimizeBox 属性设置为 false; 2. 在状态栏中无图标显示 设置为fase即可。 3. 设置窗体的启动位置 方法1&#xff0c; 用代码控制 this.Location …

LiveBos---按钮成下拉

转载于:https://www.cnblogs.com/luhanzhen/p/6802779.html

Solr:创建拼写检查器

在上一篇文章中&#xff0c;我谈到了Solr Spellchecker的工作原理&#xff0c;然后向您展示了其性能的一些测试结果。 现在&#xff0c;我们将看到另一种拼写检查方法。 与其他方法一样&#xff0c;此方法使用两步过程。 相当快速的“候选单词”选择&#xff0c;然后对这些单词…

Django 和 html

下面是对应的形式&#xff0c;自定义的forms 转载于:https://www.cnblogs.com/kilen/p/6804047.html

【Java大系】Java快速教程

感谢原作者&#xff1a;Vamei 出处&#xff1a;http://www.cnblogs.com/vamei Java是面向对象语言。这门语言其实相当年轻&#xff0c;于1995年才出现&#xff0c;由Sun公司出品。James Gosling领导了Java的项目小组。该项目的最初只想为家电设计一门容易移植的语言。然而&am…

[dpdk] 读官方文档(3)

续前节&#xff0c; 测试小程序 1. 想编译测试程序首先需要设置两个环境变量&#xff0c;为什么呢&#xff0c;因为测试程序的Makefile里用了。。。 rpm装了打包好的devel包&#xff0c;这个rpm也会自带这两个环境变量。就是说写第三方程序的时候&#xff0c;习惯上&#xff0c…

逻辑表达式——黑纸白纸

一、问题描述 有A、B、C、D、E五个人&#xff0c;每人额头上都贴了一张黑色或白色的纸条。五人对坐&#xff0c;每人都可以看到其他人额头上的纸的颜色&#xff0c;但都不知道自己额头上的纸的颜色。五人互相观察后&#xff0c; A说&#xff1a;“我看见有三个人额头上贴的是白…

java 1.6u29 下载_jdk1.6 64位下载|JDK 6(Java SE Development Kit)下载6u43 64位官方版_java运行环境 IT猫扑网...

jdk1.6 64位适用于x64的系统安装的java运行环境&#xff0c;Java SE Development Kit6是java开发人员必备的产品&#xff0c;也叫做jdk6&#xff0c;欢迎下载使用。官方介绍适用于您的计算机(windows)的 Java 软件&#xff0c;即 Java Runtime Environment&#xff0c;也称为 J…

ZK 6中的MVVM初探

MVVM与MVC 在上一篇文章中&#xff0c;我们已经看到Ajax框架ZK如何采用CSS选择器启发的Controller来在View中连接UI组件并监听它们的事件。 在此ZK MVC模式下&#xff0c; View中的UI组件无需绑定到任何Controller方法或数据对象。 使用选择器模式作为将View状态和事件映射到Co…

消失循环的2023?你都做了什么? | 2023 年度总结

2023年度总结 -- 今年都做了什么事&#xff1f; 前言心态关键词感悟 记录申请软著独立游戏技术成长 共勉 前言 又到了一年一次年度总结的时候了。我们常常感叹时间飞逝&#xff0c;却又没办法让它放慢的脚步。那就将2023写下来&#xff0c;让它在时间的长河中留下一丝记忆。 心…

java语言基本语法_Java语言基本语法

Java语言基本语法一、标识符和关键字标识符在java语言中&#xff0c;用来标志类名、对象名、变量名、方法名、类型名、数组名、包名的有效字符序列&#xff0c;称为“标识符”&#xff1b;标识符由字母、数字、下划线、美元符号组成&#xff0c;且第一个字符不能是数字&#xf…

Maven的鸟瞰图

我们每天要做的一件事是使用Maven通过发出诸如mvn install之类的构建命令来构建我们的项目。 然后&#xff0c;Maven查看我们项目的配置文件&#xff08;亲切地称为POM&#xff09;&#xff0c;神奇地找出要执行的操作&#xff0c;并且&#xff0c;嘿&#xff0c;您的构建已完成…

node源码详解(五)

本作品采用知识共享署名 4.0 国际许可协议进行许可。转载保留声明头部与原文链接https://luzeshu.com/blog/nodesource5 本博客同步在https://cnodejs.org/topic/56ed6735b705742136388fa6 本博客同步在http://www.cnblogs.com/papertree/p/5295344.html 在上一篇博客&#xff…

51Nod - 1381 硬币游戏

51Nod - 1381 硬币游戏 有一个简单但是很有趣的游戏。在这个游戏中有一个硬币还有一张桌子&#xff0c;这张桌子上有很多平行线&#xff08;如下图所示&#xff09;。两条相邻平行线之间的距离是1&#xff0c;硬币的半径是R&#xff0c;然后我们来抛硬币到桌子上&#xff0c;抛…

javascript 相关小的知识点集合

本文主要是列出一些javascript 相关的&#xff0c;不限于javascript的&#xff0c;容易记错或者遗忘的小知识&#xff0c;小技巧。 1、javascript中的false 在 JavaScript&#xff0c;常见的 false 值&#xff1a; 0, 0, 0, -0, false, ,null,undefined,NaN 要注意空数组([])和…

AOS – 另外一个独特的页面滚动动画库(CSS3)

AOS 是一个用于在页面滚动的时候呈现元素动画的工具库&#xff0c;你可能会觉得它和 WOWJS 一样&#xff0c;的确他们效果是类似的。但是AOS是 CSS3 动画驱动的库&#xff0c;当你滚动页面的时候能让元素动起来&#xff0c;当页面滚回顶部的时候&#xff0c;元素能够回到前一个…

JavaFX 2.0 Hello World

在讨论示例本身之前&#xff0c;我想向您展示如何在NetBeans中创建JavaFX应用程序。 &#xff08;如果尚未安装JavaFX和NetBeans&#xff0c;请参阅我以前的文章《 安装JavaFX 2.0和NetBeans 7.7.1》 &#xff09;单击“文件”菜单中的“新建项目”以打开项目向导。 然后选择“…