说明:水平有限仅供参考



  1. 查找当前目录下文件大小大于100k的文件,并且修改日期为3天内的文件,并将其移动到/tmp

方法一:find for

for i in `find . -type f -size +100c`;do mv $i /tmp;done

方法二:find exec,find xargs

find . -type f -size +100c -exec mv {} /tmp/ \;
 find . -type f -size +100c  -mtime +3 |xargs -I '{}' mv {} /tmp/a


方法三:find awk

find . -type f -size +100c -mtime +3 |xargs -I '{}' ls {} | awk '{print "mv " $0 " /tmp/" }' |bash

知识点:

    find中-exec与xargs的使用

    -size    +表示大于,单位c表示k,m表示M

    mtime    +表示多少天前,-表示多少天内



2.打印*的图形,说明:执行./function 1 2 3 4 2 4,打印参数对应数字个*符号,例如

*

**

***

****

**

****

答:

python实现

# -*- coding:utf-8 -*-

import sys

def printstart(n):              #打印指定个*符号
    for i in xrange(n):
        sys.stdout.write("*")

def main():
    alist = sys.argv[1:]            #将参数放入alist
    for i in xrange(len(alist)):    #str转换为int
        alist[i] = int(alist[i])

    for i in xrange(len(alist)):
        printstart(alist[i])
        print


if __name__ == "__main__":
    main()

知识点:

    sys.agrv 是一个list,保存程序名和所有参数的值


shell实现

root@vmUbu:/home/dell/shell# cat shift.sh 
#/bin/bash


while [ $# -ne 0 ]
do

        for i in `seq $1`
        do
                echo -n "*"
        done
        echo
        shift 
done

测试

root@vmUbu:/home/dell/shell# ./shift.sh 1 2 3 4 2 4
*
**
***
****
**
****
root@vmUbu:/home/dell/shell#

知识点

    $1    第一个参数的值

    $#    参数的个数

    $@    所有参数

    shift   向前移动一个参数


3.打印access.log 排名前10的ip,和对应的user agent数

答:


shell实现

   #awk '{print $1}' access.log |sort |uniq -c|sort -rnk 1 |head -n 10

   #cat access.log |awk '{a[$1]++}END{for(i in a) print i,a[i]}' |sort -rnk 2 |head -n 10

    疑问:对应user agent统计呢?

python实现

说明python实现优点麻烦,仅当练习之目的。

import sys

ip_dict={}

filename = "access.log"
with open(filename, "rb") as rf:
    for line in rf.readlines():
        ip = str(line.strip("\n").split(" ")[0])
        if  ip not in ip_dict:
            ip_dict[ip] = 1
        else:
            ip_dict[ip] += 1
#按值排序
sortedDict = sorted(ip_dict.iteritems(),key=lambda ip_dict:ip_dict[1],reverse=True)
for key,value in sortedDict:
    print key, value

测试

C:\Python27\python.exe C:/Users/Administrator/PycharmProjects/HuaweiExcercise/mytest.py

10.9.40.134 16

10.9.40.135 6

10.9.40.131 2


Process finished with exit code 0




4.输出随机密码,密码长度必须大于6,必须包括至少一个大写,至少一个小写,至少一个数字


python实现

# -*- coding:utf-8 -*-

import sys
import random

def main():
    seed = "!@#$%&_1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
    seedupper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    seedlower = "abcdefghijklmnopqrstuvwxyz"
    seednum = "1234567890"
    upper = random.choice(seedupper)
    lower = random.choice(seedlower)
    num = random.choice(seednum)

    n = 8
    passwdtmp = ""
    for i in xrange(n-3):
        passwdtmp += random.choice(seed)

    passwd = upper + lower +num + passwdtmp
    print passwd


if __name__ == "__main__":
    main()

shell实现

root@vmUbu:/home/dell/shell# vim randompasswd.sh
echo $n

#/bin/bash


read -p "input a number:" n
if [ $n -le 6 ]
then
        echo "Error,input a number great than 6."
        exit
fi

upper=`tr -dc "A-Z" < /dev/urandom  |head -c 1`
lower=`tr -dc "a-z" < /dev/urandom  |head -c 1`
num=`tr -dc "0-9" < /dev/urandom  |head -c 1`

passwd=$upper$lower$num

let n=$n-3
for i in `seq $n`
do
        char=`tr -dc "[A-Z,a-z,0-9,!@#$%^&]" < /dev/urandom  |head -c 1`
        passwd=$passwd$char
done
echo $passwd

测试

root@vmUbu:/home/dell/shell# ./randompasswd.sh 
input a number:8
Jy9kRBHC
root@vmUbu:/home/dell/shell# ./randompasswd.sh 
input a number:9
Nj7lh0Ph#
root@vmUbu:/home/dell/shell# ./randompasswd.sh 
input a number:10
He8I&eWzXu
root@vmUbu:/home/dell/shell# ./randompasswd.sh 
input a number:5
Error,input a number great than 6.
root@vmUbu:/home/dell/shell#