1.在脚本中定义函数
函数有两部分组成:函数名,函数体
2.建立和执行函数
function findit ()
{
if [ $# -lt 1 ]; then
echo "Uage : findit file";
return 1;
fi;
for loop in "$@";
do
find /usr/local/yjg $loop -print;
done
}
[root@localhost yjg]# findit
Uage : findit file
[root@localhost yjg]# findit fun1.txt
/usr/local/yjg
/usr/local/yjg/fun1.txt
/usr/local/yjg/fun2.txt
fun1.txt
[root@localhost yjg]#
3.函数举例
#!/bin/sh
#fun2.txt
function char_name(){
_LETTERS_ONLY=$1
_LETTERS_ONLY=` echo $1|awk '{if($0~/[^a-zA-Z]/) print "1"}'`
if [ "$_LETTERS_ONLY" != "" ]; then
return 1
else
return 0
fi
}
function name_error(){
echo " $@ contains errors,it must contain only letters"
}
while :
do
echo -n "what is your first name:"
read F_NAME
if char_name $F_NAME; then
break
else
name_error $F_NAME
fi
done
while :
do
echo -n "what is your surname:"
read S_NAME
if char_name $S_NAME; then
break
else
name_error $S_NAME
fi
done
~
~
~
~
"fun2.sh" 38L, 563C written
[root@localhost yjg]# ./fun2.sh
what is your first name:123
123
123 contains errors,it must contain only letters
what is your first name:abc
abc
what is your surname:321
321
321 contains errors,it must contain only letters
what is your surname:cde
cde
[root@localhost yjg]#
选择单个字符
read_a_char ()
{
SAVEDSTTY=`stty -g`;
stty cbreak;
dd if=/dev/tty bs=1 count=1 2> /dev/null;
stty cbreak;
stty=$SAVESTTY
}
判断是否是文件夹
[root@localhost yjg]# is_a_directory(){
> if [ $# -lt 1 ]; then
> echo "is_it_a_directory: I need an argument"
> return 1
> fi
> _DIRECTORY_NAME=$1
> if [ ! -d $_DIRECTORY_NAME ]; then
> return 1
> else
> return 0
> fi
> }
提示回答
#!/bin/sh
#continue_prompt.fun
echo "Enter into fun"
function prompt(){
#to call: continue_prompt "string to display" default answer
STR=$1
echo $STR
DEFAULT=$2
echo $DEFAULT
if [ $# -lt 1 ]; then
echo "continue prompt: I need a string to display"
return 1
fi
while :
do
echo -n " $_STR [Y..N] [$_DEFAULT]:"
read ANS
case $ANS in
Y) return 0
;;
N) return 1
;;
esac
case $ANS in
y|Y|Yes|YES)
return 0
;;
n|N|No|NO)
return 1
;;
*) echo "Answer either Y or N,default is $_DEFAULT "
;;
esac
echo $ANS
done
}
从登录ID中,抽取信息
#!/bin/sh
#whois.fun
function whois(){
if [ $# -lt 1 ]; then
echo "whois : need user id's please"
return 1
fi
for loop
do
USER_NAME=` grep $loop /etc/passwd | awk -F: '{print $4}' `
if [ "$USER_NAME" = "" ]; then
echo "whois: Sorry cannot find $loop"
else
echo "$loop is $USER_NAME"
fi
done
}
whois dave yjg superman
列出文件行号
#!/bin/sh
#number_file.fun
function filen(){
FILENAME=$1
if [ $# -ne 1 ]; then
echo "number_file: I need a filename to number:"
return 1
fi
loop=1
while read LINE
do
echo "$loop: $LINE"
loop=` expr $loop + 1 `
done < $FILENAME
}
filen $1
小写转大写
#!/bin/sh
#str_to_upper.fun
function str_to_upper(){
STR=$1
if [ $# -ne 1 ]; then
echo "number_file: I need a string to convert please"
return 1
fi
echo $@ | tr '[a-z]' '[A-Z]'
}
str_to_upper $1
字符串长度
#!/bin/sh
#check_length.fun
function check_len(){
STR=$1
MAX=$2
if [ $# -ne 2 ]; then
echo "check_length: I need a string and max length the string should be"
return 1
fi
LENGTH=` echo $STR | awk '{print length($0)}' `
if [ "$LENGTH" -gt "$MAX" ]; then
return 1
else
return 0
fi
}
check_len $1 $2