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

  

posted @ 2019-12-18 22:46  MlxgzZ  阅读(280)  评论(0编辑  收藏  举报