shell脚本编写算法详解程序员

2019.08.28

 1. 编写一个shell脚本,判断192.168.1.0/24络内,在线的ip有哪些,能ping通就代表在线。

[[email protected] scripts]# vim 001-judge_ip.sh 
#!/bin/bash 
 
for ip in $(seq 254) 
do 
  ping -c 1 192.168.1.$ip &>/dev/null 
  if [ $? = 0 ];then 
    echo 192.168.1.$ip is online 
  fi 
done

2019.08.29

 1. 编写一个shell脚本,批量创建5个用户并且创建8位随机密码。

# 第一种方法 
[[email protected] scripts]# vim 002-creat_user.sh 
#!/bin/bash 
 
for u in user{01..05} 
do 
  useradd $u 
  PWD=`tr -dc '0-z' </dev/urandom | head -c 8` 
  echo -e "user:$u/npassword:$PWD" >>/tmp/user.txt 
  echo "$u:$PWD" | chpasswd 
done 
# 第二种方法 
[[email protected] scripts]# vim 002-creat_user.sh 
#!/bin/bash 
 
for u in oldboy{01..05} 
do 
  useradd $u 
  for p in `echo $RANDOM | md5sum | cut -c 1-8` 
  do 
    echo -e "user:$u/npassword:$p" >>/tmp/user.txt 
    echo "$u:$p" | chpasswd 
  done 
done 

2019.08.30

 1. 写一个批量分发公钥的脚本。

# CentOS 7.x版本 
[[email protected] scripts]# vim batch.sh 
#!/bin/bash 
 
PWD=接收公钥主机的密码 
 
rm -rf /root/.ssh/id_dsa* 
ssh-keygen -t dsa -f /root/.ssh/id_dsa -P '' -q 
 
for ip in $* 
do 
  sshpass -p $PWD ssh-copy-id -i /root/.ssh/id_dsa.pub -o StrictHostKeyChecking=no $ip &>/dev/null 
  if [ $? != 0 ];then 
    echo -e "/n----- $ip distribution of failure -----/n"  
    continue 
  fi 
done

2019.09.01

 1. 猜数字游戏,60以内的整数。

[[email protected] scripts]# vim guess_number.sh 
#!/bin/bash 
 
RAN=$((RANDOM%61)) 
COUNT=0 
 
while true 
do 
  read -p 'Please enter a number:' num 
  ((COUNT++)) 
  expr $num + 0 &>/dev/null 
  if [ $? -ne 0 -o $num -gt 60 ];then 
    echo 'Invalid parameter,Please enter an integer within 60' 
  else 
    if [ $num -eq $RAN ];then 
      echo "Bingo!You guessed right,$COUNT times" 
      exit 
    elif [ $num -gt $RAN ];then 
      echo 'too big' 
    else 
      echo 'too small' 
    fi 
  fi 
done

2019.11.04

 1. 找出目录中大于200M的日志文件并压缩,压缩文件仍保留在原目录中,压缩完成后删除原日志文件。

[[email protected] scripts]# vim find.sh 
#!/bin/bash 
 
for file in `find /data/logs -type f -name '*.log' -size +200M` 
do 
        filename=`basename  ${file}` 
        dirname=`dirname  ${file}` 
        cd ${dirname} 
        tar -zcPf ${filename}.tar.gz ${filename} --remove-files 
done

2019.12.06

 1. CentOS 6&7 初始化脚本

# 首先需要启动你的网卡(根据实际的网卡名称,可用ip a查看网卡名)。 
[[email protected] scripts]# ifup eth0 
[[email protected] scripts]# cat optimize.sh 
#!/bin/bash 
 
# Author:JingXue 
# CreateDate:2019/12/06 
# Description:CentOS 6&7 初始化脚本 
 
NET=`ip a | egrep 'ens|eth0' | head -1 | awk -F '[ :]+' '{print $2}'` 
VERSION=`cat /etc/redhat-release | awk -F '.' '{print $1}' | awk '{print $NF}'` 
 
set_network () { 
        egrep 'ONBOOT=yes|ONBOOT="yes"' /etc/sysconfig/network-scripts/ifcfg-${NET} &>/dev/null || sed -i 's/ONBOOT.*/ONBOOT=yes/g' /etc/sysconfig/network-scripts/ifcfg-${NET} 
        grep persistent /etc/rc.local &>/dev/null || echo '>/etc/udev/rules.d/70-persistent-net.rules' >>/etc/rc.local            # 初始化模板时需要执行 
        egrep 'HWADDR|UUID' /etc/sysconfig/network-scripts/ifcfg-${NET} &>/dev/null && sed -ri '/HWADDR|UUID/d' /etc/sysconfig/network-scripts/ifcfg-${NET}   # 初始化模板时需执行 
} 
 
set_yum_repos() {                       # 阿里云主机可省此步骤 
    grep aliyun CentOS-Base.repo.bak &>/dev/null 
    if [ $? != 0 ];then 
        mv /etc/yum.repos.d/CentOS-Base.repo{,.bak} 
        if [ ${VERSION} = 6 ];then 
            curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo 
        elif [ ${VERSION} = 7 ];then 
            curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 
        fi 
    else 
        continue 
    fi 
} 
 
set_public() { 
    yum clean all && yum makecache fast 
    yum -y update 
    yum -y install epel-release 
    yum -y install tree lrzsz nmap nc telnet vim wget lsof net-tools bash-completion bash-completion-extras psmisc bind-utils sysstat htop yum-utils sshpass git expect unzip 
    grep 'rm=' /etc/bashrc &>/dev/null || echo "alias rm='rm is not used'" >>/etc/bashrc 
    grep 'PS1=' /etc/profile &>/dev/null || echo 'export PS1="/[/e[37;40m/][/[/e[31;40m/]/u/[/e[37;40m/]@/h /[/e[33;40m/]/W/[/e[0m/]]//$ "' >>/etc/profile 
    source /etc/profile /etc/bashrc 
    grep 'SELINUX=disabled' /etc/selinux/config &>/dev/null || sed -i.bak 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config      # 阿里云ECS可省 
    setenforce 0        # 阿里云ECS可省 
    grep 'time sync' /var/spool/cron/root &>/dev/null || echo -e '# time sync/n*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null' >>/var/spool/cron/root    # 阿里云ECS可省 
} 
 
set_limits() { 
    grep 'nofile 65536' /etc/security/limits.conf &>/dev/null || echo -e '* soft nofile 65536/n* hard nofile 65536' >>/etc/security/limits.conf 
cat >>/etc/sysctl.conf <<EOF 
net.ipv4.tcp_syncookies = 1 
net.ipv4.tcp_tw_reuse = 1 
net.ipv4.tcp_tw_recycle = 1 
net.ipv4.tcp_fin_timeout = 30 
vm.max_map_count=262144 
EOF 
    sysctl -p 
    if [ ${VERSION} = 6 ];then 
        sed -i 's/1024/4096/g' /etc/security/limits.d/90-nproc.conf 
    else 
        continue 
    fi 
} 
 
set_hostname() { 
    read -p '请设置主机名:' HOSTNAME 
    if [ ${VERSION} = 6 ];then 
        hostname ${HOSTNAME} 
        sed -i.bak "s/^HOST.*/HOSTNAME=${HOSTNAME}/" /etc/sysconfig/network 
        sed -i.bak "s/localhost/.localdomain/${HOSTNAME}/" /etc/hosts 
    elif [ ${VERSION} = 7 ];then 
        hostnamectl set-hostname ${HOSTNAME} 
        sed -i.bak "s/localhost/.localdomain/${HOSTNAME}/" /etc/hosts 
    fi 
 
} 
 
set_services() { 
    if [ ${VERSION} = 6 ];then 
        service iptables stop 
        service postfix stop 
        chkconfig iptables off 
        chkconfig postfix off 
        chkconfig network on 
        chkconfig sshd on 
        chkconfig crond on 
    elif [ ${VERSION} = 7 ];then 
        systemctl start sshd.service network.service crond.service 
        systemctl enable sshd.service network.service crond.service 
        systemctl stop NetworkManager firewalld.service postfix.service 
        systemctl disable NetworkManager firewalld.service postfix.service 
    fi 
} 
 
set_network 
set_yum_repos 
set_public 
set_limits 
set_hostname 
set_services 
 
echo -e "/033[31m*******************系统初始化完毕,将在20s后重启!!!*******************/033[0m" 
sleep 20s && reboot 




未完待续……

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/2291.html

(0)
上一篇 2021年7月16日
下一篇 2021年7月16日

相关推荐

发表回复

登录后才能评论