Linux/Unix 华丽的Shell

1. 求两个数的最大公约数和最小公倍数

#!/bin/sh
#=================================================================
#    Author :  greatwqs                                         
#    Info   :  求两个数的最大公约数和最小公倍数
#    Input  :  LCM表示最小公倍数(lowest common multiple) 
#    Call   :  lcm 12 15            
#    Date   :  2010/12/17 - modify format           
#    xxxx   :  2010/12/17 - Creation                              
#-----------------------------------------------------------------
#  Usage information                                              
#-----------------------------------------------------------------
Usage()
{
 echo "========================================="
 echo "求两个数的最大公约数和最小公倍数"
 echo "用法: lcm 12 15"
 echo "返回: 最大公约数:3,最小公倍数:60."
 echo "========================================="
 exit -1
}
#-----------------------------------------------------------------
#  Test for valid input or display usage() information            
#-----------------------------------------------------------------
if [ $# -lt 2 ]; then
  Usage
fi
#-----------------------------------------------------------------
#   得到命令中的两个值
#-----------------------------------------------------------------
num1=$1
num2=$2
#-----------------------------------------------------------------
#   operation the variables
#   1.先找出其中一个比较小的数,用这个数进行递增的循环
#   2.对另外一个值进行求膜运算
#   3.在运算过程中,对能整除的循环变量记录下来
#   4.把能整除的最大的变量opr取出(最大公约数)
#   5.result = num1/opr  *  num2/opr  * opr = num1/opr * num2
#-----------------------------------------------------------------
#-----------------------------------------------------------------
#   get num : 1.GREAT,2.SMALL
#-----------------------------------------------------------------
if [ num1 -eq num2 ]; 
then
    echo "最大公约数:${num1},最小公倍数:${num1}."    
    exit
fi
if [ num1 -gt num2 ]; 
then 
    GREAT=$num1
    SMALL=$num2
    export GREAT
    export SMALL
else
    GREAT=$num2
    SMALL=$num1
    export GREAT
    export SMALL
fi 
#echo "GREAT ${GREAT}"
#echo "SMALL ${SMALL}"
#-----------------------------------------------------------------
#   程序测试最大公约数,初始化变量
#   tmp=`expr $GREAT % $i` 语法调试了半个小时!!
#-----------------------------------------------------------------
i=1
GCD_RESULT=1
greattmp=1
smalltmp=1
LCM_RESULT=1
export  i
export  greattmp
export  smalltmp
export  GCD_RESULT
export  LCM_RESULT
while [ i -le SMALL ]
do
#echo "LOOP i: ${i}"
    greattmp=`expr $GREAT % $i`
    smalltmp=`expr $SMALL % $i`
#echo "greattmp : ${greattmp}"
#echo "smalltmp : ${smalltmp}"
    if [ ${greattmp} -eq 0 ]; then 
        if [ ${smalltmp} -eq 0 ]; then
            GCD_RESULT=${i}
        fi
    fi
    i=`expr ${i} + 1`
#echo "GCD_RESULT : ${GCD_RESULT}"
done
#echo ${GCD_RESULT}
#-----------------------------------------------------------------
#   上面已经求出了最大的公约数(GCD_RESULT)
#   下面进行最小公倍数的处理
#   为了避免变量名的太多,这里的余数用smalltmp和greattmp代替
#   5.result = num1/opr  *  num2/opr  * opr = num1/opr * num2
#   *号为乘号,要考虑转义
#-----------------------------------------------------------------
LCM_RESULT=`expr $SMALL / $GCD_RESULT`
#echo "LCM_RESULT : ${LCM_RESULT}"
LCM_RESULT=`expr $LCM_RESULT \* $GREAT`
echo "最大公约数:${GCD_RESULT},最小公倍数:${LCM_RESULT}."
#-----------------------------------------------------------------
#EOF
#-----------------------------------------------------------------

 2. shell-计算文件中单词出现次数并按次数排序

echo  'abdaaccabca' | sed 's/./&\n/g' | grep -c a

3. 依次读取文本文件, 每行中词与词之间用竖线(|)分割,分割后依次把参数保存至数据库。

 

#!/bin/sh
for line in `cat mm.txt`
do
    echo $line | awk -F "|" '{ print $1,$2,$3 }'     
    #$line=greatwqs|wang|great
    #echo $1
    #echo $2
    #echo $3
    java com.greatwqs.shell.DBImportTool $1 $2 $3
done
 

4. 查找字符统计:

#!/bin/bash

if [ ! -n "$1" ]
then
    echo "Usage ./statistics filepath [keywords]"
    exit 0
fi

KEY_WORD=""
if [ -n $2 ]
then
    KEY_WORD=$2
fi

awk 'BEGIN{}
{
    if ("'$KEY_WORD'" == "") {
        if($6 == "\"POST" || $6 == "\"GET") {
            urls[$7]++
        }
    } else {
        if(($6 == "\"POST" || $6 == "\"GET") && $7 == "'$KEY_WORD'") {
            urls[$7]++
        }
    }
}
END{
    for (i in urls) {
        print i, urls[i]
    }
}' $1 | sort -k 2rn

 

继续添加中...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很好,那么你需要完成一个Linux/Unix Shell编程的大作业,这是一个非常有趣的任务。下面是一些可能的项目想法: 1. 实现一个简单的 Shell:创建一个简单的 Shell,它可以执行基本的命令,例如 cd,ls,pwd,echo等。你可以使用 C 语言来实现它。 2. 批量文件重命名:编写一个脚本,可以批量更改文件名。例如,将所有文件名以“old_”开头的文件更改为以“new_”开头的文件。 3. 自动备份脚本:编写一个脚本,可以定期备份指定目录中的文件。你可以使用 tar 命令来完成压缩和解压缩任务。 4. 系统监控工具:编写一个 Shell 脚本,可以监控系统资源使用情况。例如,你可以通过查看系统日志文件,检查 CPU 和内存使用情况,以及查看网络流量。 5. 进程管理工具:编写一个 Shell 脚本,可以管理系统中的进程。例如,你可以通过脚本来启动、停止或重启进程,或者查看进程的状态等。 6. 网络脚本:编写一个脚本,可以执行网络操作。例如,你可以编写一个脚本来扫描网络,查找开放的端口,或者测试网络带宽等。 7. 日志分析工具:编写一个 Shell 脚本,可以分析系统日志文件。例如,你可以编写一个脚本来查找错误,或者收集统计信息。 8. 系统安全工具:编写一个 Shell 脚本,可以检查系统安全性。例如,你可以编写一个脚本来查找漏洞,或者测试系统的防火墙规则等。 以上是一些可能的项目想法,你可以根据自己的兴趣和能力来选择。无论你选择哪个项目,都需要仔细研究相关技术,并且在实现过程中保持耐心和毅力。祝你好运!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值