如何编写和使用自定义 Shell 函数和库
在 Linux 中,shell 脚本以多种不同的方式帮助我们,包括执行甚至自动化某些系统管理任务、创建简单的命令行工具等等。
在本指南中,我们将向 Linux 新用户展示在何处可靠地存储自定义 shell 脚本,解释如何编写自定义 shell 函数和库,以及如何在其他脚本中使用库中的函数。
Shell 脚本的存储位置
为了在不输入完整/绝对路径的情况下运行脚本,它们必须存储在 ` PATH 环境变量中的目录之一中。
要检查您的` PATH,请发出以下命令:
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
通常,如果目录bin存在于用户主目录中,它会自动包含在他/她的` PATH中。您可以在此处存储 shell 脚本。
因此,创建 bin 目录(也可以存储 Perl、Awk 或 Python 脚本或任何其他程序):
mkdir ~/bin
接下来,创建一个名为 lib(库的缩写)的目录,您将在其中保存自己的库。您还可以在其中保留其他语言(例如 C、Python 等)的库。在其下创建另一个名为sh的目录;这将专门存储您的 shell 库:
mkdir -p ~/lib/sh
创建您自己的 Shell 函数和库
shell 函数是一组在脚本中执行特殊任务的命令。它们的工作方式与其他编程语言中的过程、子例程和函数类似。
编写函数的语法是:
function_name() { list of commands }
例如,您可以在脚本中编写一个函数来显示日期,如下所示:
showDATE() {date;}
每次您想要显示日期时,只需使用其名称调用上面的函数即可:
showDATE
shell 库 只是一个 shell 脚本,但是,您可以编写一个库来仅存储稍后可以从其他 shell 脚本调用的函数。
下面是我的 ~/lib/sh 目录中名为 libMYFUNCS.sh 的库的示例,其中包含更多函数示例:
#!/bin/bash
#Function to clearly list directories in PATH
showPATH() {
oldifs="$IFS" #store old internal field separator
IFS=: #specify a new internal field separator
for DIR in $PATH ; do echo $DIR ; done
IFS="$oldifs" #restore old internal field separator
}
#Function to show logged user
showUSERS() {
echo -e “Below are the user logged on the system:\n”
w
}
#Print a user’s details
printUSERDETS() {
oldifs="$IFS" #store old internal field separator
IFS=: #specify a new internal field separator
read -p "Enter user name to be searched:" uname #read username
echo ""
#read and store from a here string values into variables using : as a field delimiter
read -r username pass uid gid comments homedir shell <<< "$(cat /etc/passwd | grep "^$uname")"
#print out captured values
echo -e "Username is : $username\n"
echo -e "User's ID : $uid\n"
echo -e "User's GID : $gid\n"
echo -e "User's Comments : $comments\n"
echo -e "User's Home Dir : $homedir\n"
echo -e "User's Shell : $shell\n"
IFS="$oldifs" #store old internal field separator
}
保存文件并使脚本可执行。
如何从库中调用函数
要使用lib中的函数,首先需要在将使用该函数的shell脚本中包含lib,格式如下:
./path/to/lib
OR
source /path/to/lib
因此,您可以在另一个脚本中使用库 ~/lib/sh/libMYFUNCS.sh 中的函数 printUSERDETS ,如下所示。
您不必在此脚本中编写其他代码来打印特定用户的详细信息,只需调用现有函数即可。
打开一个名为 test.sh 的新文件:
#!/bin/bash
#include lib
. ~/lib/sh/libMYFUNCS.sh
#use function from lib
printUSERDETS
#exit script
exit 0
保存它,然后使脚本可执行并运行它:
chmod 755 test.sh
./test.sh
在本文中,我们向您展示了在哪里可靠地存储 shell 脚本、如何编写自己的 shell 函数和库、如何在普通 shell 脚本中调用库中的函数。
接下来,我们将解释将 Vim 配置为 Bash 脚本的 IDE 的直接方法。在此之前,请始终与 TecMint 保持联系,并通过下面的反馈表分享您对本指南的想法。