设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 手机 数据 公司
当前位置: 首页 > 服务器 > 安全 > 正文

9个函数示例,让你重新认识Shell(3)

发布时间:2021-01-04 10:33 所属栏目:53 来源:网络整理
导读:循环持续直到输入到变量NAME的数据小于最大字符长度,这里指定为10,break命令然后跳出循环.使用上述脚本段,输出结果如下: Enter your FIRST name :PerterrrrrrrrrrrrrrrrrrrrrrrrrrThe name field is too long 10 c

循环持续直到输入到变量NAME的数据小于最大字符长度,这里指定为10,break命令然后跳出循环.使用上述脚本段,输出结果如下:

Enter your FIRST name :Perterrrrrrrrrrrrrrrrrrrrrrrrrr
The name field is too long 10 characters max
Enter your FIRST name :Peter

可以使用wc命令取得字符串长度.但是要注意,使用wc命令接受键盘输入时有一个误操作.如果用户输入了一个名字后,点击了几次空格键,wc会将这些空格也作为字符串的一部分,因而给出其错误长度.awk在读取键盘时缺省截去字符串末尾处空格.以下是wc命令的缺点举例(也可以称为特征之一)

#!/bin/bash
echo -n "name :"
read NAME
echo $NAME | wc -c

运行上述脚本(其中?为空格)

name eter??
6

八、在脚本中调用函数

要在脚本中调用函数,首先创建函数,并确保它位于调用之前.以下脚本使用了两个函数.此脚本前面提到过,它用于测试目录是否存在.

#!/bin/sh
# function file
is_it_a_directory()
{
 ? ? ? ?# is_it_a_directory
 ? ? ? ?# to call: is_it_a_directory directory_name
 ? ? ? ?_DIRECTORY_NAME=$1
 ? ? ? ?if [ $# -lt 1 ]; then
 ? ? ? ? ? ? ? ?echo "is_it_a_directory: I need a directory name to check"
 ? ? ? ? ? ? ? ?return 1
 ? ? ? ?fi ? ? ?
 ? ? ? ?# is it a directory ?
 ? ? ? ?if [ ! -d $_DIRECTORY_NAME ]; then
 ? ? ? ? ? ? ? ?return 1
 ? ? ? ?else ? ?
 ? ? ? ? ? ? ? ?return 0
 ? ? ? ?fi ? ? ?
}
# --------------------------------------------
error_msg()
{
 ? ? ? ?# error_msg
 ? ? ? ?# beeps: display messages; beeps again!
 ? ? ? ?echo -e "\007"
 ? ? ? ?echo $@
 ? ? ? ?echo -e "\007"
 ? ? ? ?return 0
}
### END OF FUNCTIONS
echo -n "Enter destination directory :"
read DIREC
if is_it_a_directory $DIREC
then :
else ? ?
 ? ? ? ?error_msg "$DIREC does not exist...creating it now"
 ? ? ? ?mkdir $DIREC > /dev/null 2>&1
 ? ? ? ?if [ $? != 0 ]; then
 ? ? ? ? ? ? ? ?error_msg "Could not create directory:: check it out!"
 ? ? ? ? ? ? ? ?exit 1
 ? ? ? ?else :
 ? ? ? ?fi ? ? ?
fi ? ? ?
# not a directory
echo "extracting files ..."
上述脚本中,两个函数定义于脚本开始部分,并在脚本主体中调用.所有函数都应该在任何脚本主体前定义.注意错误信息语句,这里使用函数errormsg显示错误,反馈所有传递到该函数的参数,并加两声警报.

九、从函数文件中调用函数

前面讲述了怎样在命令行中调用函数,这类函数通常用于系统报表功能.现在再次使用上面的函数,但是这次将之放入函数文件functions.sh里.sh意即shell脚本

#!/bin/sh
# functions.sh
# main scripts functions
is_it_a_directory()
{
 ? ? ? ?# is_it_a_directory
 ? ? ? ?# to call: is_it_a_directory directory_name
 ? ? ? ?_DIRECTORY_NAME=$1
 ? ? ? ?if [ $# -lt 1 ]; then
 ? ? ? ? ? ? ? ?echo "is_it_a_directory: I need a directory name to check"
 ? ? ? ? ? ? ? ?return 1
 ? ? ? ?fi ? ? ?
 ? ? ? ?# is it a directory ?
 ? ? ? ?if [ ! -d $_DIRECTORY_NAME ]; then
 ? ? ? ? ? ? ? ?return 1
 ? ? ? ?else ? ?
 ? ? ? ? ? ? ? ?return 0
 ? ? ? ?fi ? ? ?
}
# --------------------------------------------
error_msg()
{
 ? ? ? ?# error_msg
 ? ? ? ?# beeps: display messages; beeps again!
 ? ? ? ?echo -e "\007"
 ? ? ? ?echo $@
 ? ? ? ?echo -e "\007"
 ? ? ? ?return 0
}

现在编写脚本就可以调用functions.sh中的函数了.注意函数文件在脚本中以下述命令格式定位:

. <path to file>

使用这种方法不会创建另一个shell,所有函数均在当前shell下执行.

#!/bin/sh
# direc_check
# source the funtion file fuctions.sh
# that's a <dot><space><forward slash>
. ./functions.sh
# now we can use the fuctions(s)
echo -n "Enter destination directory :"
read DIREC ? ? ? ? ? ? ? ? ? ? ?
if is_it_a_directory $DIREC
then : ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
else ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
 ? ? ? ?error_msg "$DIREC does not exist ... creating it now!" ? ? ? ? ?
 ? ? ? ?mkdir $DIREC > /dev/null 2>&1
 ? ? ? ?if [ $? != 0 ]; then ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
 ? ? ? ? ? ? ? ?error_msg "Could not create directory:: check it out!"
 ? ? ? ? ? ? ? ?exit 1
 ? ? ? ?else : ?
 ? ? ? ?fi
fi ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
# not a directory
echo "extracting files ..."

执行结果如下所示:

# sh direc_check.sh Enter destination directory :AUDIT AUDIT does not exist...creating it now extracting files ...

文:马哥Linux团队
文章出处:运维部落

(编辑:ASP站长网)

网友评论
推荐文章
    热点阅读