Shell常用脚本

本文介绍了一系列实用的Shell脚本示例,包括进程ID查询、网络连通性检查、防火墙规则动态更新、MySQL数据库备份等,展示了Shell脚本在自动化运维任务中的应用。

shell常用脚本

[root@nginx ~]# basename /etc/sysconfig/network-scripts/ifcfg-eth0 
ifcfg-eth0
[root@nginx ~]# dirname /etc/sysconfig/network-scripts/ifcfg-eth0
/etc/sysconfig/network-scripts

[root@nginx ~]# cat process.sh
#!/bin/bash
echo "PID of this script: $$"              #($$)查看当前脚本的进程ID
echo "PPID of this script: $PPID"          #($PPID)查看当前脚本父进程的进程ID
echo "UID of this script: $UID"            #($UID)查看用户的UID
echo $$ >/var/log/$(basename $0 .sh).pid   #basename $0 .sh:获取脚本名称和去除.sh文件后缀名

[root@web01 scripts]# cat ping.sh     #并发执行ping(快速执行加{ }&)
#!/bin/bash 
for n in {1..254};do
    {
    ping -c 1 10.0.0.$n &>/dev/null
    if [ $? -eq 0 ];then
        echo "10.0.0.$n" >>/tmp/cunhuo.log
    else
        echo "10.0.0.$n" >>/tmp/dead.log
    fi
}&
done
wait      #wait等待前面的后台任务全部完成才往下执行
echo "hello world"

[root@web01 scripts]# cat iptables.sh
#!/bin/bash
. /etc/init.d/functions
if [ $UID -ne 0 ];then
    echo "Please use root run scription!!!!!"
    exit 10
fi
while true
do
    awk '{print $1}' /application/nginx/logs/access.log|sort -n -r|uniq -c >/tmp/ip.txt
    while read LINE
        do
            IP=${LINE#* }
            COUNT=${LINE%% *}
            ADD_IP=$(iptables -nL|egrep $IP|wc -l)
            IPTABLES(){
                if [ "$COUNT" -gt 5 -a $ADD_IP -eq 0 ];then
                    iptables -I INPUT -s $IP -j DROP
                    action "$IP is dropped!!!!!!"  /bin/true
                elif [ $COUNT -lt 5  ];then
                    iptables -D INPUT -s $IP -j DROP 2>/dev/null
                fi
            }
            IPTABLES 
        done </tmp/ip.txt
    sleep 60
done

[root@db02 3306]# cat fenku.sh    #Mysql分库备份
port=3306
socket=/data/${port}/mysql.sock
CmdPath="/application/mysql/bin"
MysqlCmd="mysql -S $socket"
MysqlDump="mysqldump -S $socket"
DataPath=/data/backup
[ -d $DataPath ] || mkdir $DataPath -p
for dbname in `$CmdPath/$MysqlCmd -e "show databases;"|sed 1d|grep -v "_schema"`
do
   $CmdPath/$MysqlDump  -B --master-data=2 $dbname|gzip >$DataPath/${dbname}_$(date +%F).sql.gz
done

[root@web01 scripts]# cat md5sum.sh
#!/bin/sh
array=(
21029299
00205d1c
a3da1677
1f6d12dd
890684b
)
Path=/tmp/md5.txt
funGetMd5() {
    > $Path
    for ((Num=0;Num<=32767;Num++))
    do     
       {
       Stat=$(echo $Num|md5sum)
       echo "$Stat $Num" >> $Path
       }&     
    done
}
funFindMd5() {
    word=$(echo "${array[@]}"|sed -r 's# |\n#|#g')
    grep -E "$word" $Path
}
funcMain(){
    funGetMd5
    funFindMd5
}
funcMain

[root@web01 scripts]# cat arr3.sh 
#!/bin/sh
. /etc/init.d/functions
array=(
http://blog.oldboyedu.com
http://blog.etiantian.org
http://oldboy.blog.51cto.com
http://10.0.0.7
)
function wait(){
    echo -n "Start Curl_check"
    for n in {1..3}
    do
        echo -n " ."
        sleep 1
        if [ $i -eq 4 ];then
            echo -e "\t"
            action "Curl_check is start!!!!!!" /bin/true
        fi
    done
}
function check_url(){
    wget -o /dev/null --spider -T 10 --tries=1  $1 
    if [ $? -eq 0 ];then
        action "$1 is ok" /bin/true
    else
        action "$1 is no" /bin/false
    fi
}
function main(){
    wait
    for((i=0;i<${#array[*]};i++))
    do
        check_url ${array[i]}
        sleep 1
    done
}
main

[root@nginx ~]# cat func.sh $1
#!/bin/bash
. /etc/init.d/functions
function name() {
    if [ -z $1 ];then
        echo "Usg:sh $0 [ip/domain]"
        return 1
    else
    ping -c 3 $1 >/dev/null
        if [ $? -eq 0 ];then
            echo "up"
        else
            echo "down"
            return 2
        fi
    fi
}
result=$(name $1)   #取函数的运行结果,以及向函数里传参
echo $?             #取函数的return值
if [ "$result" == "down" ];then
    /sbin/ifdown eth1 >/dev/null
    action "eth1 is down" /bin/true
elif [ "$result" == "up" ];then
    /sbin/ifup eth1 >/dev/null
    action "eth1 is up" /bin/true
else
    echo $result
fi

[root@nginx ~]# cat menu.sh      #打印菜单脚本
#!/bin/sh
clear
echo -e "\n\n\t\t\tScripts admin menu"
echo -e "\n\t\t++++++++++++++++++++++++++++\n"
echo -e "\t\t1.  Install Apche"
echo -e "\t\t2.  Install PHP"
echo -e "\t\t3.  Install Mysql"
echo -e "\n\t\t++++++++++++++++++++++++++++"
echo -en "\n\t\t  Please enter Install option: " 
read -t 5 -n 1 NUM
case $NUM in 
    1) 
    echo -e "\n\nInstall Apple\n"
    ;;
    2) 
    echo -e "\n\nInstall PHP\n"
    ;;
    3)
    echo -e "\n\nInstall Mysql\n"
    ;;
        *)
        echo -e "\n\n\tUsge: Enter 1|2|3\n"
esac

[root@nginx ~]# cat captrue.sh   #自动抓包脚本
#!/bin/bash
n=1
while true;do
    tcpdumpid=`ps aux | grep tcpdump | awk '/^tcpdump/{print $2}'`
  curl 172.30.3.198:6011 &>/dev/null
  if [ $? -ne 0 ];then
    echo "$n `date +"%Y-%m-%d %T"` ---curl 172.30.3.198 false..." >>./status_error.log
    num=`ps aux | grep tcpdump| wc -l`
    if [ $num -eq 1 ];then
      tcpdump src host 172.30.4.152 and dst host 172.30.3.198 -w ./server_152.cap &
    fi
  else 
    kill $tcpdumpid >/dev/null 2>&1
    [ -f ./server_152.cap ] && mv ./server_152.cap ./server_$(date +%F-%T)_152.cap
    echo "$n `date +"%Y-%m-%d %T"` ---curl 172.30.3.198 ok..." >>./status.log
  fi
  ((n++))
  sleep 2
done

shell逐行读取文件

方法一,指定换行符读取:
#! /bin/bash 
IFS="\n" 
for LINE in `cat /etc/passwd` 
do 
echo $LINE 
done
方法二,文件重定向给read处理:
#! /bin/bash 
cat /etc/passwd | while read LINE
do
echo $LINE 
done
方法三,用read读取文件重定向:
#! /bin/bash
while read LINE
do
echo $LINE
done < /etc/passwd 

read   -p     接提示语句
          -t 3   超时设置(单位为秒)
          -n 3  允许输入的最大字符串个数,大于3个直接退出
          -s     隐藏输入的字符串

while循环的特长是执行守护进程,以及实现我们希望循环不退出持续执行的应用,擅长用于频率小于1分钟循环处理,其他的while循环几乎都可以被for循环取代
if语句、for语句最常用,其次while(守护进程),case(服务启动脚本)
sleep默认单位秒(s),usleep默认单位微秒(μs)

标准输入stdin,标准输出stdout和标准错误stderr,三个系统文件的文件描述符分别为0,1和2。所以2>&1的意思就是将标准错误也输出到标准输出当中

 

 

转载于:https://www.cnblogs.com/xwupiaomiao/p/8037972.html

### 回答1: Shell脚本是一种编程语言,用于在Unix或Linux操作系统中进行自动化任务的编写。常用脚本下载工具有wget和curl。 1. wget: wget是一个在命令行中使用的下载工具,可以通过URL下载文件或者网页。使用wget下载文件非常简单,只需要执行以下命令即可: ``` wget <URL> ``` 例如,要下载一个名为example.txt的文件,可以执行以下命令: ``` wget https://example.com/example.txt ``` 如果要指定文件下载到本地的位置,可以使用-o选项: ``` wget -o <local_path> <URL> ``` 例如,将example.txt文件下载到本地的/home/user目录中,可以执行以下命令: ``` wget -o /home/user/example.txt https://example.com/example.txt ``` 2. curl: curl是另一个常用的下载工具,也可以通过URL下载文件或者网页。使用curl下载文件的命令如下: ``` curl -o <local_path> <URL> ``` 例如,将example.txt文件下载到本地的/home/user目录中,可以执行以下命令: ``` curl -o /home/user/example.txt https://example.com/example.txt ``` curl还支持其他下载选项,例如下载进度显示和断点续传等。要显示下载进度,可以使用--progress选项: ``` curl --progress -o <local_path> <URL> ``` 例如,同时显示下载进度并将example.txt文件下载到本地的/home/user目录中,可以执行以下命令: ``` curl --progress -o /home/user/example.txt https://example.com/example.txt ``` 对于大文件的下载,如果下载中断,可以使用-c选项进行断点续传。例如: ``` curl -c -o <local_path> <URL> ``` 以上是shell常用脚本下载方法,通过wget和curl可以方便地从指定URL下载文件到本地,满足自动化脚本下载的需求。 ### 回答2: 常用shell脚本下载方法有以下几种: 1. 使用wget命令:wget是一个非常常用的命令行工具,可以用来从网络上下载文件。使用wget命令下载脚本非常简单,只需在终端中输入wget加上脚本的下载链接,回车后即可开始下载。 2. 使用curl命令:curl也是一个常用的命令行工具,可以用来传输数据。与wget类似,使用curl下载脚本的方法是在终端中输入curl加上脚本的下载链接,回车后即可进行下载。 3. 使用git命令:如果脚本存储在一个git仓库中,可以使用git命令来下载。首先需要在终端中输入git clone加上脚本所在仓库的地址,回车后git会自动下载整个仓库,包括其中的所有脚本文件。 4. 使用svn命令:如果脚本存储在一个svn仓库中,可以使用svn命令来下载。首先需要在终端中输入svn checkout加上脚本所在仓库的地址,回车后svn会自动下载整个仓库,包括其中的所有脚本文件。 值得注意的是,以上方法都要求在终端中使用相应的命令,且需要有相应的软件支持。同时,下载脚本时需要确保具备相应的权限,并且脚本所在的服务器是可访问的。 ### 回答3: Shell常用脚本下载是指通过使用Shell脚本语言编写的程序,实现从互联网上下载文件的功能。在日常使用中,Shell脚本下载经常用于获取源代码、文档、软件包等。以下是一些常用Shell脚本下载方法和示例: 1. 使用curl命令进行下载: curl是一种强大的命令行工具,可用于发送HTTP请求和获取服务器上的文件。使用curl下载文件的基本语法如下: curl -O [URL] 示例:下载一个文件 curl -O https://example.com/file1.txt 2. 使用wget命令进行下载: wget是一个非常流行的工具,可在命令行中下载文件。wget支持多种协议,如HTTP、HTTPS和FTP。使用wget下载文件的基本语法如下: wget [URL] 示例:下载一个文件 wget https://example.com/file2.txt 3. 使用ftp命令进行下载: ftp是一种用于在计算机之间传输文件的协议,可以通过Shell脚本使用ftp命令下载文件。使用ftp下载文件的基本语法如下: ftp [URL] 示例:下载一个文件 ftp ftp://example.com/file3.txt 以上是常用Shell脚本下载方法和示例。通过使用curl、wget和ftp等工具,我们可以方便地在Shell脚本中实现文件下载功能。根据具体需求,我们可以选择合适的工具和相应的命令参数来完成下载任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值