- 函数的定义
方法1:
function_name () {
statement
}
方法2:
function function_name () {
statement
}
–先定义后使用
例:模拟用函数写一个服务启动,关闭,重启的脚本 (要求有start,stop,restart,status)
--以sshd服务为例写的服务脚本
#!/bin/bash
start() {
pid=`pidof sshd`
if [ -z $pid ];then
/usr/sbin/sshd
echo "正在启动 sshd: [确定]"
else
echo "服务sshd(pid $pid)已存在"
fi
}
function stop() {
pid=`pidof sshd`
if [ ! -z $pid ];then
echo "服务sshd 已停"
else
killall sshd &> /dev/null
echo "停止 sshd: [确定]"
fi
}
restart() {
pid=`pidof sshd`
if [ -z $pid ]; then
echo "停止 sshd:[失败]"
/usr/sbin/sshd
echo "正在启动 sshd:[确定]"
else
echo "停止 sshd:[确定]"
/usr/sbin/sshd
echo "正在启动 sshd:[确定]"
fi
}
status(){
pid=`pidof sshd`
if [ -z $pid ];then
echo "服务sshd 已停"
else
echo "服务sshd (pid $pid)正在运行..."
fi
}
case "$1" in
start )
#启动sshd服务
start
;;
stop )
# 停止sshd
stop
;;
restart )
restart
;;
status )
status
;;
* )
echo "用法: /root/ssh2.sh {start|stop|restart|status}"
esac
-
函数的参数
fun() {
echo $1 --接收参数,$1=arg1,$2=arg2,$0是文件名
echo $2
}
fun arg1 arg2 … --传参
实例:#!/bin/bash
add() {
echo $1+$2 | bc
}
sub() {
echo $1-$2 | bc
}使用$1来接受add或sub,$2$3分别是2个数字
case “$1” in
add )
add $2 $3
;;
sub )
sub $2 $3
;;
* )
exit
esac -
函数的返回值
fun(){
return value --使用return返回一个值(数字,只能是整数)
}fun --调用函数
echo $? --函数的返回值#!/bin/sh
#函数传参
add() {
return $[$1+$2]
}
sub() {
return $[$1-$2]
}case “$1” in
add )
add $2 $3
echo “$2+ 3 的 和 是 3的和是 3的和是?”
;;
sub )
sub $2 $3
echo “$2- 3 的 差 是 3的差是 3的差是?”
;;
* )
echo “usage: sh $0 arg1 arg2 arg3”
esac
使用read输入一个整数,把数字中的所有数字转换成英文单词
如:2345 转换为 two three four five
提示:需要计算输入的整数的长度,然后进行循环,截取整数中的单一字符(cut -c),对截取的单一字符
#!/bin/bash
read -p "请输入一个整数:" num
length=`echo ${#num}` #${#string} 返回$string的长度
translate() {
case "$1" in
0 )
echo -n " zero "
;;
1 )
echo -n " one "
;;
2 )
echo -n " two "
;;
3 )
echo -n " three "
;;
4 )
echo -n " four "
;;
5 )
echo -n " five "
;;
6 )
echo -n " six "
;;
7 )
echo -n " seven "
;;
8 )
echo -n " eight "
;;
9 )
echo -n " nine "
esac
}
for (( i=1; i<=$length; i++ ))
do
char=`echo $num |cut -c$i`
translate $char
done
echo
三. 数组
数组的定义:
# abc=( 1 2 a b "sfsda sf sfdsa" ) --定义一个数组,可以是数字,字母,或者字符串
# echo ${abc[0]} --数组的下标是0不是1
1
# echo ${abc[1]}
2
# echo ${abc[2]}
a
# echo ${abc[3]}
b
# echo ${abc[4]}
sfsda sf sfdsa
--查看数组的全部值
# echo ${abc[*]}
1 2 a b sfsda sf sfdsa
# echo ${abc[@]}
1 2 a b sfsda sf sfdsa
--查看数组的个数
# echo ${#abc[*]}
5
# array3=(`ifconfig eth0|grep Mask`)
# echo ${array3[0]}
inet
# echo ${array3[1]}
addr:10.1.1.35
# echo ${array3[2]}
Bcast:10.1.1.255
# echo ${array3[3]}
Mask:255.255.255.0
echo ${array[2]} | cut -d: -f2