linux函数与数组
1. 函数的定义 方法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 2. 函数的参数 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 3. 函数的返回值 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的和是$?" ;; sub ) sub $2 $3 echo "$2-$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