shell里面的index函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell里面的index函数相关的知识,希望对你有一定的参考价值。

参考技术A 你说的awk
index?
如何测试一个字符串在另外一个字符串里?比如a="11",b="11
22
33
44",如何判断a是否存在与b中?这就需要用index()函数。我们讲一个例子:
文件a:
36
18
19
70
97
66
71
13
23
48
23
68
88
11
12
文件b:
97
19
18
36
18
28
71
53
24
33
48
13
66
25
55
12
11
75
36
23
19
要求文件a里对应文件b里的行,如果文件a里出现过的数字,在文件b里标记出来。
$
awk
'getline
v<"a";for(i=1;i<=NF;i++)if(index(v,$i))$i="-"$i1'
b
-97
-19
-18
-36
-18
28
71
53
24
33
-48
-13
-66
25
55
-12
-11
75
36
-23
19
[解析]
index(s,
t)
Returns
the
index
of
the
string
t
in
the
string
s.
返回t字符串存在与s字符串中位置的正整数,不存在则返回0。
awk
'ARGIND==1for(i=1;i<=NF;i++)a[FNR","$i];nextfor(i=1;i<=NF;i++)FNR","$i
in
a?$i="-"$i:01'
a
b

shell函数

1、在了解shell函数之前,先来了解Linux中别名的作用

函数就类似于别名的作用,简单的说函数就是将程序相同的代码块组合起来,并为其取一个名字(函数名),在需要调用的地方写上函数名即可,注意这点和Python里面的函数不一样,Python里面函数钓鱼用需要函数名+小括号,而shell函数只需名字即可

 

2、shell函数语法

function 函数名() {

     指令...

      return n

}

function可以不写

 

3、shell函数脚本--开发优化系统脚本

系统优化思路如下

1、安装系统时精简安装包

2、配置国内高速的yum源

3、禁用开机不需要的启动服务

4、优化系统内核参数 /etc/sysctl.conf

5、增加系统文件描述符

6、禁止root远程登录,修改ssh端口,配置ssh加速

7、有外网ip地址的配置防火墙,仅放行需要开启的服务,关闭selinux

8、配置服务器时间同步

9、初始化用户配置普通用户sudo权限

10、修改系统字符集等

[root@lamp01 scripts]# cat sys.sh
#!/bin/bash

#no.1
if [ $UID != 0 ];then
    echo "pls run this scripts must by root."
fi

. /etc/init.d/functions

#no.2

check_yum(){
    Base=/etc/yum.repos.d/CentOS-Base.repo
    if [ `grep aliyun $Base|wc -l` -ge 1  ];then
        action "$Base config" /bin/true
    else
        action "$Base config" /bin/false
    fi
}


#no.3
check_selinux(){
    config=/etc/selinux/config
    if [ `grep "SELINUX=disabled" $config|wc -l ` -ge 1  ];then
        action "$config config" /bin/true
    else
        action "$config config" /bin/false
    fi
}
#no.4
close_iptables(){
    /etc/init.d/iptables stop
    chkconfig iptables off
}

#no.5
check_service(){
    export LANG=en
    if [ `chkconfig|grep 3:on|egrep "crond|sshd|network|rsyslog|sysstat"|wc -l` -eq 5 ]
      then
        action "sys service init" /bin/true
    else
        action "sys service init" /bin/false
    fi

#no.6
adduser(){
    if [ $(grep -w martin123 /etc/passwd|wc -l) -lt 1 ];then
        useradd martin123
        echo 123456|passwd --stdin martin123
        \\cp /etc/sudoers /etc/sudoers.ori
        echo "martin123  ALL=(ALL) NOPASSWD: ALL " >>/etc/sudoers
        visudo -c &>/dev/null
    fi
}

#no.7
charset(){
    cp /etc/sysconfig/i18n /etc/sysconfig/i18n.ori
    echo \'LANG="zh_CN.UTF-8"\'  >/etc/sysconfig/i18n
    source /etc/sysconfig/i18n
}
#no.8
time_sync(){
    cron=/var/spool/cron/root
    if [ `grep -w "ntpdate" $cron|wc -l` -lt 1 ];then
           echo \'#time sync by martin\' >>$cron
           echo \'*/5 * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1\' >>$cron
           #crontab -l
    fi
}
#no.9
line_set(){
    if [ `egrep "TMOUT|HISTSIZE|HISTFILESIZE" /etc/profile|wc -l` -lt 3  ];then
        echo \'export TMOUT=300\' >>/etc/profile
        echo \'export HISTSIZE=5\' >>/etc/profile
        echo \'export HISTFILESIZE=5\' >>/etc/profile
        . /etc/profile
    fi
}

#no.10
check_open_file(){
    limits=/etc/security/limits.conf
    if [ `grep 65535 $limits|wc -l` -eq 1 ]
      then
        action "$limits" /bin/true
    else
        action "$limits" /bin/false
    fi

#no.11
kernet_set(){
    if [ `grep kernel_flag /etc/sysctl.conf|wc -l` -lt 1 ]
      then
        cat >>/etc/sysctl.conf<<EOF
        #kernel_flag
        net.ipv4.tcp_fin_timeout = 2
        net.ipv4.tcp_tw_reuse = 1
        net.ipv4.tcp_tw_recycle = 1
        net.ipv4.tcp_syncookies = 1
        net.ipv4.tcp_keepalive_time = 600
        net.ipv4.ip_local_port_range = 4000    65000
        net.ipv4.tcp_max_syn_backlog = 16384
        net.ipv4.tcp_max_tw_buckets = 36000
        net.ipv4.route.gc_timeout = 100
        net.ipv4.tcp_syn_retries = 1
        net.ipv4.tcp_synack_retries = 1
        net.core.somaxconn = 16384
        net.core.netdev_max_backlog = 16384
        net.ipv4.tcp_max_orphans = 16384
        net.nf_conntrack_max = 25000000
        net.netfilter.nf_conntrack_max = 25000000
        net.netfilter.nf_conntrack_tcp_timeout_established = 180
        net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
        net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
        net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
EOF
        sysctl -p
    fi
}

#no.12
init_ssh(){
    \\cp /etc/ssh/sshd_config /etc/ssh/sshd_config.`date +"%Y-%m-%d_%H-%M-%S"`
    #sed -i \'s%#Port 22%Port 49721%\' /etc/ssh/sshd_config
    sed -i \'s%#PermitRootLogin yes%PermitRootLogin no%\' /etc/ssh/sshd_config
    sed -i \'s%#PermitEmptyPasswords no%PermitEmptyPasswords no%\' /etc/ssh/sshd_config
    sed -i \'s%#UseDNS yes%UseDNS no%\' /etc/ssh/sshd_config
    /etc/init.d/sshd reload &>/dev/null
}
#no.13
update_linux(){
    if [ `rpm -qa lrzsz nmap tree dos2unix nc|wc -l` -le 3 ];then
        yum install lrzsz nmap tree dos2unix nc -y
    fi

}

main(){
    check_yum
    check_selinux
    check_service
    check_open_file
    adduser
    line_set
    init_ssh
    update_linux
    kernet_set
    charset
    time_sync
    close_iptables
}
main

 

以上是关于shell里面的index函数的主要内容,如果未能解决你的问题,请参考以下文章

shell函数

shell函数基础

linux Shell函数

shell 中怎么声明一个函数

shell脚本里的函数怎么调用???

shell_script2