shell常用自定义函数

本文介绍了一系列用于服务器管理的Shell脚本,包括检查命令存在性、获取IP地址、去重数组、添加及去除定时任务、文件比较、生成无注释文件、磁盘空间检查和端口占用检查等功能。这些脚本简化了日常服务器运维工作。

检查命令是否在服务器上存在

cmd_exist() {
        type $1 >/dev/null 2>&1 && return 0 || return 1 
}
cmd_exist "unzip" || sudo yum install -y unzip

获取服务器IP地址

get_ip() {
        #ifconfig -a| awk -F':' '{ if(NR==2){ print $2 } }'| cut -d' ' -f1
        IP=`ifconfig | grep -w inet | grep -v "127.0.0.1" | awk '{ print $2}'| tr -d "addr"`
        echo ${IP#*:}

}

去重字符串数组中的重复项

remove_dup_item() {
    local ustr=""
    local orgstr=$1
    local tmpstr=$1
    for str in $orgstr; do
        tmpstr=${tmpstr#*$str}
        isuniq=yes
        for lstr in $tmpstr; do
            if [ "$lstr" = "$str" ]; then
                isuniq=no
                break
            fi
        done
        if [ "$isuniq" = "yes" ]; then
            if [ -z "$ustr" ]; then
                ustr=$str
            else
                ustr="$ustr $str"
            fi
        fi
    done
    echo $ustr
}

添加定时任务

PROGRAM="/export/App/app_manager/updata_app.sh"
CRONTAB_NOTE="## $PROGRAM"
CRONTAB_CMD="0 2 * * * $PROGRAM"

#添加定时任务
add_cron_task() {
        (crontab -l 2>/dev/null | grep -Fv $CRONTAB_NOTE; echo "$CRONTAB_NOTE") | crontab -
        (crontab -l 2>/dev/null | grep -Fv $PROGRAM; echo "$CRONTAB_CMD") | crontab -
}

去除定时任务

#去除定时任务
PROGRAM="/export/App/app_manager/updata_app.sh"
CRONTAB_NOTE="## $PROGRAM"
CRONTAB_CMD="0 2 * * * $PROGRAM"
rmv_cron_task() {
        (crontab -l 2>/dev/null | grep -Fv $CRONTAB_NOTE) | crontab -
        (crontab -l 2>/dev/null | grep -Fv $PROGRAM) | crontab -
}

带颜色打印

echo_red() {
	echo -e "\033[31m$*\033[0m"
}

echo_red_error() {
	echo -e "\033[31m[ERROR]: $*\033[0m"
}

echo_red_success() {
	echo -e "\033[31m[SUCCESS]: $*\033[0m"
}

echo_green() {
	echo -e "\033[32m$1\033[0m"
}

echo_green_info() {
	echo -e "\033[32m[INFO]: $*\033[0m"
}

echo_yellow() {
	echo -e "\033[33m$*\033[0m"
}

echo_yellow_warn() {
	echo -e "\033[33m[WARNNING]: $*\033[0m"
}

echo_blue() {
	echo -e "\033[34m$*\033[0m"
}

echo_blue_info() {
	echo -e "\033[34m[INFO]: $*\033[0m"
}


echo_pink() {
	echo -e "\033[35m$*\033[0m"
}

比较文件

compare_file() {
	diff -q $1 $2 1>/dev/null 2>&1
	echo $?
}

生成不带注释的文件

#去开头空格、去#号注释行、去空行
get_nc_file() {
	sed -e 's/^\s*//g' -e '/^#/d' -e '/^$/d' $1>$2
}

检查磁盘空间

# param1, 文件路径
# param2, 需要比较的空间大小,单位m
disc_space_enough() {
	free_space=`df -m $1| tail -1 | awk -F" " '{print $4}'`
	[ ${free_space} -ge $2 ] && echo 0 || echo 1
}

检查端口是否被占用

#检查端口是否被占用
port_ava() {
        sudo netstat -anp | grep ":$1" >/dev/null 2>&1
        [ $? -eq 0 ] && return 1 || return 0
}
Shell中,给自定义函数传参可按如下方法操作: ### 简单传参 在调用函数时直接在函数名后添加参数,函数体内部通过`$n`的形式获取参数的值,其中`$1`表示第一个参数,`$2`表示第二个参数,依此类推。例如: ```bash fun_param(){ echo "第一个参数为 $1 !" echo "第二个参数为 $2 !" echo "第十个参数为 $10 !" echo "参数总数有 $# 个!" echo "作为一个字符串输出所有参数 $* !" } fun_param 1 2 3 4 5 6 7 8 9 10 11 ``` 此示例中,调用`fun_param`函数时传入了多个参数,在函数内部使用`$n`获取对应参数的值,`$#`获取参数总数,`$*`将所有参数作为一个字符串输出 [^1]。 ### 用于运算的传参 在函数内部对传入的参数进行运算。例如: ```bash function send1 () { echo $[$1+$2] } send1 7 8 9 10 ``` 这里调用`send1`函数并传入参数,函数内部对前两个参数进行相加运算并输出结果 [^2]。 ### 结合循环传参 可以结合循环给函数传参。例如: ```bash #!/bin/bash ip=(192.168.23.13 192.168.23.14 192.168.23.15) mianmi(){ /usr/bin/expect << EOF spawn ssh-copy-id -i /home/ceshi/.ssh/id_rsa.pub ceshi@$1 expect { "*yes/no" { send "yes\r"; exp_continue } "*assword:" { send "#e!@ZHss25J\r" } } expect eof EOF } for i in ${ip[@]} do mianmi $i done ``` 此示例中,通过循环遍历数组`ip`,将数组元素作为参数依次传递给`mianmi`函数 [^4]。 ### 特殊变量传参 在函数内部还可使用`"$@"`和`"$*"`来处理参数。`"$@"`被扩展成`"$1" "$2" "$3"`等,`"$*"`被扩展成`"$1c$2c$3c"`,其中`c`是`IFS`的第一个字符,`"$@"`更为常用 [^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值