循环持续直到输入到变量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站长网)
|