LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: KornLee

【shell脚本欣赏区】:[展示你的作品的好去处!欢迎投帖]

[复制链接]
发表于 2009-3-4 06:23:51 | 显示全部楼层

一个穷极无聊之下写的除法计算器

bash的只能给出整数结果,所以,写了那么一个脚本。



  1. #!/bin/bash
  2. #ZERO=0
  3. #ONE=1
  4. LEAST=2
  5. STAND=3
  6. if [ "$#" -lt "$LEAST" ]; then
  7. echo usage: float.sh A B [NF]
  8. echo "      " calculate A/B with NF digits after point
  9. echo "      " default is 5 digits
  10. exit
  11. else
  12. A=$1
  13. B=$2
  14. fi
  15. NF=5
  16. if [ "$#" -ge "$STAND" ]; then
  17. NF=$3
  18. fi

  19. out=""

  20. for ((i=0;i<=$NF;i++))
  21. do

  22. if [ "$i" = '1' ];then
  23. out="${out}."
  24. fi

  25. C=`expr $A / $B`
  26. A=`expr $A % $B`

  27. if [ "$A" = '0' ];then
  28. i=$NF
  29. fi

  30. if [[ "$A" != '0' && "$i" -eq "$NF" ]];then
  31.   if [[ "$A" > '4' ]];then
  32.     C=`expr $C "+" 1`
  33.   fi
  34. fi

  35. A=`expr $A "*" 10`

  36. out="${out}${C}"
  37. done

  38. echo $out
复制代码
回复 支持 反对

使用道具 举报

发表于 2009-6-22 15:07:22 | 显示全部楼层
好~~学习了,牛人
回复 支持 反对

使用道具 举报

发表于 2009-7-3 20:55:09 | 显示全部楼层

MySQL备份并上传到FTP的shell脚本

#!/bin/bash

########################################################################
## Author:zhao mingfeng                                                                                                                      ##
## Date:2009-05-12                                                                                                                              ##
## Copyright(c) 2009, zhaomf  All Rights Reserved       ##
########################################################################

# this shell aimed at 2 points:
# 1.use mysqldump backup mysql database bwisp to /backup/mysql.
# 2.upload /backup/mysql backup files to a delicated ftp address.

# before start this shell you should set privileges use chmod as fllows
# chmod 755ftp.sh

echo
echo "__________________________start_________________________"
################ use mysqldump backup mysql database bwisp ################

echo "$(date +%Y-%m-%d_%H:%M:%S)"
echo "++++++++++start using mysqldump backup mysql database +++++++++"
MyUSER="bwisp2"         #usename
MyPASS="bwisp2"         #password
MyHOST="192.168.168.4"  #hostname of host ip

# Linux bin paths, change this if it can't be autodetected via which command
MYSQL="$(which mysql)"
MYSQLDUMP="$(which mysqldump)"
CHOWN="$(which chown)"
CHMOD="$(which chmod)"
TAR="$(which tar)"
GZIP="$(which gzip)"
TOUCH="$(which touch)"
CAT="$(which cat)"

# Backup Dest directory, change this if you have someother location
DEST="/backup"

# Main directory where backup will be stored
MBD="$DEST/mysql"

# Get hostname
HOST="$(hostname)"

# Get data in yyyy-mm-dd format
NOW="$(date +"%Y-%m-%d")"

# File to store current backup file
FILE=""

# Store list of databases
DBS=""

# DO NOT BACKUP these databases
FANFAN="information_schema"

[ ! -d $MBD ] && mkdir -p $MBD || :

# Only root can access it!
$CHOWN 0.0 -R $DEST
$CHMOD 0600 $DEST

# Get all database list first
DBS="$($MYSQL -u $MyUSER -h $MyHOST -p$MyPASS -Bse 'show databases')"
for db in $DBS
do
    skipdb=-1
    if [ "$FANFAN" != "" ];
    then
        for i in $FANFAN
        do
            [ "$db" == "$i" ] && skipdb=1 || :
        done
    fi

    if [ "$skipdb" == "-1" ] ; then
        FILE="$MBD/$db.$HOST.$NOW.gz"
        # do all inone job in pipe,
        # connect to mysql using mysqldump for select mysql database
        # and pipe it out to gzip file in backup dir
        $MYSQLDUMP -u $MyUSER -h $MyHOST -p$MyPASS $db | $GZIP -9 > $FILE
    fi
done
echo "$(date +%Y-%m-%d_%H:%M:%S)"
echo "+++++++++ finished dump mysql databases to $MBD +++++++++"
################## starting upload files to delicated ftp ##################
$TOUCH $MBD/ftp.cmd
FTP_CMD=$MBD/ftp.cmd
FTP=xxx.xxx.xxx.xxx
echo "$(date +%Y-%m-%d_%H:%M:%S)"
echo "+++++++++++++++ start uploading $MBD back files to ftp{FTP} +++++++++++++++++++++"
echo "open ${FTP}" > ${FTP_CMD}
echo "user xx xx" >> ${FTP_CMD}
echo "bin" >> ${FTP_CMD}
echo "hash" >> ${FTP_CMD}
echo "put $FILE /$db.$HOST.$NOW.gz" >> ${FTP_CMD}
echo "close" >> ${FTP_CMD}
echo "bye" >> ${FTP_CMD}
$CAT ${FTP_CMD} | ftp -n
rm ${FTP_CMD}
rm $FILE
echo "$(date +%Y-%m-%d_%H:%M:%S)"
echo "+++++++++++ finished upload files to ftp{FTP} +++++++++++++++"
echo "_______________________________end___________________________"
echo
################################## the end ##################################
回复 支持 反对

使用道具 举报

发表于 2010-8-24 11:49:22 | 显示全部楼层
这个帖子非常好。不过脚本还有待完善,还有很多值得讨论的地方,我刚看第一个,就发现了问题:1、脚本只能修改最后一行,其他行修改之后被原来的覆盖 2、如果文件存在特殊字符(如'/'),脚本报错。希望能有个专门讨论该帖子的脚本的空间……
回复 支持 反对

使用道具 举报

发表于 2010-8-24 11:51:34 | 显示全部楼层

该帖子值得讨论,希望有人组织一个讨论群或组,专门讨论该帖子的脚本

这个帖子非常好。不过脚本还有待完善,还有很多值得讨论的地方,我刚看第一个,就发现了问题:1、脚本只能修改最后一行,其他行修改之后被原来的覆盖 2、如果文件存在特殊字符(如'/'),脚本报错。希望能有个专门讨论该帖子的脚本的空间……
回复 支持 反对

使用道具 举报

发表于 2010-10-9 17:22:53 | 显示全部楼层
非常不错!支持下
回复 支持 反对

使用道具 举报

发表于 2010-12-19 11:08:23 | 显示全部楼层
#!/bin/sh
#
# replace.sh 批量替换文本文件内容(脚本会自动忽略非文本文件)

# 使用方式:sh replace.sh src_str(原串) desc_str(目的串) src(源文件或原目录) desc(转换后的文件或目录)
# eg: ./replace.sh "\t" "    " ~/python ~/python2 将python目录中文件的制表符替换为四个空格,并将结果导到python2中

if [ $# -ne 4 ]
then
        echo "args error, user 'sh expandtab.sh src_str desc_str src desc'"
        exit
fi

src_str=$1
desc_str=$2
src=$3
desc=$4

# 判断权限
if [ ! -r $src ]; then
        echo "srcsrc unreadable"
        exit
fi


# 转换单文件,expand_file src_file desc_file
function expand_file()
{
        if [ $# -ne 2 ]; then
                echo "expand_file() error"
                exit
        fi

        # 过滤非文本文件
        ret=`file $1|grep text`
        if [ -z "$ret" ]; then
                echo "ignore $1"
                return
        fi

        echo "expand_file $1 $2"
        # 先清空目标文件
        echo -n "" > $2
        # 替换       
        sed "s/$src_str/$desc_str/g" $1 >> $2
}

# 批量转换 expand_dir src_dir desc_dir
function expand_dir()
{
        # 递归截止条件
        if [ ! -d $1 ]; then
                expand_file $1 $2
                return
        fi

        # 目标文件夹不存在就新建
        if [ ! -d $2 ]; then
                mkdir $2
        fi

        echo "expand_dir $1 $2"
       
        for item in `ls $1`
        do
                sdir=$1"/"$item
                # 分文件和文件夹处理
                if [ -d $sdir ]; then
                        expand_dir $sdir $2"/"$item
                else
                        expand_file $sdir $2"/"$item
                fi
        done
}

# 转换
if [ ! -d $src ]; then
        # 单文件
        echo "begin single"
        if [ -d $desc ]; then
                expand_file $src $desc"/"$src
        else
                expand_file $src $desc
        fi
else
        # 批处理
        echo "begin batch"
        if [ $src != $desc ]; then
                if [ ! -d $desc ]; then
                        mkdir $desc
                fi
                expand_dir $src $desc
        else
                echo "error:desc is the same to src!"
                exit
        fi
fi

echo "replace done."
回复 支持 反对

使用道具 举报

发表于 2011-8-6 14:21:13 | 显示全部楼层

从网络上获取时间

从网上获取时间,获取成功的话,就将值写到Flash中。。如果网络没有时间的话,就直接从Flash读时间
#!/bin/sh

a=0
ping -c 3 59.124.196.84

echo $?
#if (($? == $a)) #(()):num   [[]]: str
if [ $? -eq $a ] #(()):num   [[]]: str
#if (( 0 ))
then #we can connect to network
{
        echo "we can connect to network"
        ./ntpclient -s -h 59.124.196.84
}
else #we can't connect to network
{
        echo "we can't connect to network"
        ./flashtime
}
fi
echo $?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表