shell中函数应用

1语法
方法1:
函数名()  {
    函数体
    return  n
}

function 函数名() {
    函数体
    return n
}

2#调用函数

#!/bin/bash

function fun1() {
    echo "ni"
}
fun1


#!/bin/bash

function  fun1()  {
    echo "  asfd"
}  

count=1
while [ $count -le 5 ]
do 
    fun1
    count=$[ $count+1 ]
done

echo "end"

fun1
echo  "end"


sh -x 调式脚本

3引用函数
每次引用函数时,bash会重新回到函数的定义

4函数不一定在最开始定义,但是定义函数前使用,会报错

必须先定义函数,再使用

5如果函数名字重复,那么只会使用最新的一个函数,旧的会被覆盖


6函数返回值
返回值范围0-255
1默认退出状态码:默认是函数最后一条命令返回的退出状态码。

2可以使用return命令退出函数并且返回特定的退出状态码
但是有范围0-255


3使用函数输出

使函数的输出保存在shell变量中
可以获得任何类型的函数输出
并保存到变量中
#!/bin/bash
function addem() {
        case  $# in
                1)
                echo $[ $1 + $1 ] 
                ;;
                2)
                echo $[ $2 + $1 ]
                ;;
                *) 
                echo -1 
        esac
}

addem $@

4函数中使用变量

可以向函数中传递参数
函数名会在$0变量中定义,函数命令行上的任何参数都会通过
$1,$2定义
$#来判断传给函数的参数数目

function fun1() {
    echo $[ $1 * $2 ]
}

if [ $# -eq 2 ];then
    value=`fun1 $@`
    echo "The result is $value"
else
    echo "Usage:fun1 a b"
fi


5函数中的局部变量

函数中使用local vaule=#
全局变量都可以使用
 

6函数递归


#####################
#!/bin/bash
function dg() {
        local sum=1
        case $# in
                1)
        [ $@ -gt 0 ]&&{
        for i in `seq $1`
        do
                sum=$[ $sum * $i ]
        done
                echo $sum
        }||
        echo error
                ;;
                *)
                echo errer
        esac
}
dg $@


#####################


#!/bin/bash
function addem() {
        local n=$1
        if [ $1 -eq 1 ];then
                 result=1  
        else
                tmp=$((n-1))
                addem $tmp 
                result=$(( n*result))
        fi
}
case $# in
        1)
        case $@ in
                0|1)
                echo 1
                ;;
                *) 
                addem $1
                echo $result 
        esac 
        ;;
        *)
        echo error
esac

unit信号

1捕捉信号 trap命令
ctrl+c终止信号
ctrl+z打入后台

trap "echo westos" 2
这样按ctrl+c 变成输出westos

stty -a 查看中断信号与键盘的关系

信号屏蔽
trap "" 2  这样就没有ctrl+c 的功能了,
里面可以写文本来表示 echo youcannot type
trap : 2   或者 trap - 2 信号恢复

xargs 获取前面命令的结果
-n2  每两个数据一行

##############################################
#!/bin/bash
while [ 1 ]
do
   touch /tmp/westos_`date +%F-%N-%H:%M`
        echo -e "file westos_`date +%F-%N-%H:%M` touched"
        sleep 2
done
trap "`rm -fr `find /tmp/westos_*``" 2
trap - 2
###############################################

#############################


#!/bin/bash
while [ 1 ]
do
   touch /tmp/westos_`date +%F-%N-%H:%M`
trap "rm -fr /tmp/westos_*;echo 123;break" 2 
        echo -e "file westos_`date +%F-%N-%H:%M` touched"
        sleep 2
done

find /tmp/westos*

###############################

trap "find /tmp -type f -name "westos_*"|xargs rm -f&&exit;trap - 2" 2

屏蔽所有信号不能操作
trap ""  INT EXIT TSTP TERM HUP

放到  /etc/profile.d/

跳板机
如果你用172.25.10.11作跳板机去连接172.25.254.11服务器那么
172.25.10.11 用172.25.254.11给10.11的ssh-key中的/root/.ssh/.rsa

命令ssh-copy-id .ssh/id_rsa.pub 172.25.10.11
直接就给他钥匙的命令不需要scp


vim /etc/profile.d/nimama.sh;chmod +x /etc/profile.d/nimama.sh

vim tiaoban.sh
#!/bin/bash
[ $UID -eq 0 ] &&trap ""  INT EXIT TSTP TERM HUP&& sh /mnt/tiaoban.sh||trap ""  INT EXIT TSTP TERM HUP

vim /mnt/zhenji.sh;chmod +x /mnt/zhenji.sh

#!/bin/bash
while true
do
clear
cat <<menu 
1  172.25.254.11免密登陆
2  172.25.10.11
3  exit
menu


read -p "your choice  "  va
case $va in
        1)
        ssh root@172.25.254.11 
        ;;
        2)
        ssh root@172.25.10.11
        ;;
        3)
        exit
esac
done

登陆ssh失败三次加入黑名单

1过滤日志找到Failed --> 倒入文件 --》统计ip失败次数
> file

cat /var/log/secure
vim /etc/hosts.deny
sshd:ip


vim /root/tongji.sh


#!/bin/bash
        >/etc/fileno
cat /var/log/secure|grep Failed|grep -v invalid|awk -F " " '{print $11}'>>/etc/fileno
cat /var/log/secure|grep Failed|grep 'invalid user'|awk -F " " '{print $13}'>>/etc/fileno
cat /etc/fileno|uniq -c|awk -F " " '{print $1}'
for i in  `cat /etc/fileno|uniq -c|awk -F " " '$1>=3 {print $2}'`
do
                echo "sshd:$i" >> /etc/hosts.deny
done


或者

#!/bin/bash

cat /var/log/secure | awk '/Failed/{print $(NF-3)}' | sort  | uniq -c | awk '{print $2"="$1}' > /tmp/blacklist

MAXCOUNT="3"

for i in `cat /tmp/blacklist`
do
    IP=`echo $i | awk -F= '{print $1}'`         ##????IP
    NUM=`echo $i | awk -F= '{print $2}'`        ##??????

if [ $NUM -gt $MAXCOUNT ];then
    #??IP?????IP??????
    grep $IP /etc/hosts.deny > /dev/null
    if [ $? -gt 0 ];then
        echo "sshd:$IP" >> /etc/hosts.deny
    fi
fi
done

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值