本文是Linux Shell脚本系列教程的第(一)篇,更多shell教程请看:Linux Shell脚本系列教程 想要学习linux,shell知识必不可少,今天就给大家来简单介绍下shell的基本知识。 Shell简介 Shell自身是一个用C语言编写的程序,是用户来使用Unix或Linux的桥梁,用户的大部分工作都需要通过Shell来完成。只有熟练使用shell,才能熟练掌握linux。 可以说:Shell既是一种命令语言,又是一种程序设计语言。 作为命令语言,它可以交互式地解释和执行用户输入的命令;而作为程序设计语言,它可以定义各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。 Shell虽然不是Unix/Linux系统内核的一部分,但它调用了系统核心的大部分功能来执行程序、建立文件并以并行的方式来协调各个程序的运行。…
March 5, 2018
Shell脚本:Bash function 还能这么玩, Something you didn’t know about functions in bash
今天看到一篇讲 Bash function 的有意思的文章,原文在这里。
在 Bash 中一般我们这么定义一个函数:
function name () { ... }
这是非常常见的写法,包括我自己在内,一直把他当做类似 Python、C 等语言一样的函数定义语法。实际上这里{ ... }
并不代表函数体或者函数的作用域。它只是代表里面的内容是一组命令的集合。了解这点之后,接下来就有一些比较好玩的写法了。
比如下面的函数作用是测试文件是否存在,这里就没用大括号:
function fileExists () [[ -f $1 ]]
或者
function isEven () (( $1 % 2 == 0 ))
还有下面的用法:
function name () ( ... )
这里用小括号,当执行函数的时候,会 fork 一个子进程来执行里面的命令。子进程对环境的修改不会影响到外面的父进程,也就不需要保存现场或者恢复现场的操作了。比如设置一些参数:
function caseInsensitiveMatch () ( shopt -s nocasematch .... )
除了上面的写法,这个用法的前提是函数体仅包含一行命令,或复杂或简单,比如 while、for、if、case 等结构都是可以的:
function sleep1 () while :; do "$@"; sleep 1; done
更多参看:
Shell: 获取函数返回值, Returning value from called function in a shell script
Linux Shell Script 系列教程目录, Shell脚本编程, Shell编程, Shell脚本编程入门
本文:Shell脚本:Bash function 还能这么玩, Something you didn’t know about functions in bash