在哪里存储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;}每次你想显示 日期 ,只需调用上面的函数使用它的名字:
$ showDATEshell库只是一个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〜 / 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函数