马上注册,享受更多特权
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
01 函数
1 函数名() { 函数实现 }
创建fun.sh文件,定义函数并调用函数,文件内容如下:
func(){ echo "function func is called.";}
echo "=== - start - ==="
func
echo "==== - end - ===="
在终端修改fun.sh文件为可执行文件并执行
lihoon@lihoon:~/code/Linux_shell$ ./fun.sh
=== - start - ===
function func is called.
==== - end - ====
注意:定义函数时,函数体的左花括号{和后面的命令之间必须有空格或者换行,如果将最后一条命令和右花括号}写在同一行,命令末尾必须右分号;。
2 函数传参:函数名 参数1 参数2 参数3...
继续编辑fun.sh文件,定义函数并传入参数,文件内容如下:
func(){ echo "function func is called.";}
echo "=== - start - ==="
func
echo "==== - end - ===="
echo
fun2(){
echo $0
echo $1
echo $2
}
echo $0
echo $1
echo $2
echo
echo "=== - start - ==="
fun2 11 22 33
echo "=== - end - ==="
执行文件查看结果如下:
lihoon@lihoon:~/code/Linux_shell$ ./fun.sh aa bb cc
=== - start - ===
function func is called.
==== - end - ====
./fun.sh
aa
bb
=== - start - ===
./fun.sh
11
22
=== - end - ===
注意:
函数外,$0——命令行的参数argv[0];**$1-$N——命令行的参数argv[1]-argv[N];**
函数内,$0——命令行的参数argv[0];**$1-$N——函数的参数argv[1]-argv[N];**
3 函数综合实例
编写一个批量创建目录的文件
#! /bin/sh
is_dir()
{
DIR_NAME=$1
if [ ! -d $DIR_NAME ]; then
return 1
else
return 0
fi
}
for DIR in "$@"; do
if is_dir "$DIR"
then :
else
echo "$DIR doesn't exist. Creating it now..."
mkdir $DIR > ./log 2>&1
if [ $? -ne 0 ]; then
echo "Cannot create directory $DIR."
exit 1
fi
fi
done
在终端运行文件,并传入参数:dir1,dir2,dir3
lihoon@lihoon:~/code/Linux_shell$ ./mk_dir.sh dir1 dir2 dir3
dir1 doesn't exist. Creating it now...
dir2 doesn't exist. Creating it now...
dir3 doesn't exist. Creating it now...
# 查看当前目录下的文件,发现创建了dir1、dir2和dir3的文件夹
lihoon@lihoon:~/code/Linux_shell$ ls
argv.sh dir1 file1 f.sh mk_dir.sh sample.sh Shell笔记3.md temp.txt
a.txt dir2 file2 fun.sh note.txt shell笔记1.md temp while.sh
command.sh dir3 for.sh log out Shell笔记2.md temp.sh
|