网站搜索

如何编写和使用自定义 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 保持联系,并通过下面的反馈表分享您对本指南的想法。