shell练

1、建立新用户

输入要创建的用户,如果没输入,显示为请正确输入

        查看输入的用户名是否存在,如果不存在则,新建用户,并要求输入建立密码

        如果密码是空,则默认123456为密码,如果存在则显示用户已经存在

#!/bin/bash
read -p "请输入用户名:" name
if [ $name = " " ]
then
        echo "请正确输入"
else
cat /etc/passwd |awk -F: '{print $1}' |grep "\<$name\>"
        case $? in
        1)
          useradd $name
          read -p "输入密码" mi
            if [ "$mi" = "" ]
            then
                echo "123456" |passwd --stdin $name
                echo "用户已经创建用户名:$name 密码:123456"

            else
                echo "$mi" |passwd --stdin $name
                echo "用户已经创建用户名:$name 密码:$mi"

            fi
        ;;
        0)
           echo "用户存在"
           esac
fi

2、测试四个数按大小排列

  1 #!/bin/bash
  2 read -p "输入第一个数字" x
  3 read -p "输入第二个数字" y
  4 read -p "输入第三个数字" z
  5 read -p "输入第四个数字" o
  6 if [ "$x" = "" -o "$y" = "" -o "$z" = "" -o "$o" = "" ]
  7 then
  8   echo "请正确输入"
  9 else
 10         if [ $x -lt $y -a $x -lt $z -a $x -lt $o ]
 11         then
 12             if [ $y -lt $z -a $y -lt $o ]
 13             then
 14                 if [ $z -lt $o ]
 15                 then
 16                 echo "$x小于$y小于$z小于$o"
 17                 else
 18                 echo "$x小于$y小于$o小于$z"
 19                 fi
 20             elif [ $z -lt $y -a $z -lt $o ]
 21             then
 22                 if [ $y -lt $o ]
 23                 then
 24                 echo "$x小于$z小于$y小于$o"
 25                 else
 26                 echo "$x小于$z小于$o小于$y"
 27                 fi
 28             elif [ $o -lt $y -a $o -lt $z ]
 29             then
 30                 if [ $y -lt $z ]
 31                 then
 32                 echo "$x小于$o小于$y小于$z"
 33                 else
 34                 echo "$x小于$o小于$z小于$y"
 35                 fi
 36             fi
 37         elif [ $y -lt $x -a $y -lt $z -a $y -lt $o ]
 38         then
 39             if [ $x -lt $z -a $x -lt $o ]
 40             then
 41                 if [ $z -lt $o ]
 42                 then
 43                 echo "$y小于$x小于$z小于$o"
 44                 else
 45                 echo "$y小于$x小于$o小于$z"
 46                 fi
 47             elif [ $z -lt $x -a $z -lt $o ]
 48             then
 49                 if [ $x -lt $o ]
 50                 then
 51         52                 else
 53                 echo "$y小于$z小于$o小于$x"
 54                 fi
 55             elif [ $o -lt $x -a $o -lt $z ]
 56             then
 57                 if [ $x -lt $z ]
 58                 then
 59                 echo "$y小于$o小于$x小于$z"
 60                 else
 61                 echo "$y小于$o小于$z小于$x"
 62                 fi
 63             fi
 64         elif [ $z -lt $y -a $z -lt $x -a $z -lt $o ]
 65         then
 66             if [ $y -lt $x -a $y -lt $o ]
 67             then
 68                 if [ $x -lt $o ]
 69                 then
 70                 echo "$z小于$y小于$x小于$o"
 71                 else
 72                 echo "$z小于$y小于$o小于$x"
 73                 fi
 74             elif [ $x -lt $y -a $x -lt $o ]
 75             then
 76                 if [ $y -lt $o ]
 77                 then
 78                 echo "$z小于$x小于$y小于$o"
 79                 else
 80                 echo "$z小于$x小于$o小于$y"
 81                 fi
 82             elif [ $o -lt $y -a $o -lt $x ]
 83             then
 84                 if [ $y -lt $x ]
 85                 then
 86                 echo "$z小于$o小于$y小于$x"
 87                 else
 88                 echo "$z小于$o小于$x小于$y"
 89                 fi
 90             fi
 91         elif [ $o -lt $y -a $o -lt $z -a $o -lt $x ]
 92         then
 93             if [ $y -lt $z -a $y -lt $x ]
 94             then
 95                 if [ $z -lt $x ]
 96                 then
 97                 echo "$o小于$y小于$z小于$x"
 98                 else
 99                 echo "$o小于$y小于$x小于$z"
100                 fi
101             elif [ $z -lt $y -a $z -lt $x ]
102             then
103                 if [ $y -lt $x ]
104                 then
105                 echo "$o小于$z小于$y小于$x"
106                 else
107                 echo "$o小于$z小于$x小于$y"
108                 fi
109             elif [ $x -lt $y -a $x -lt $z ]
110             then
111                 if [ $y -lt $z ]
112                 then
113                 echo "$o小于$x小于$y小于$z"
114                 else
115                 echo "$o小于$x小于$z小于$y"
116                 fi
117             fi
118         fi
119 fi


#!/bin/bash
 
arr=(30 10 50 60 40 20)
echo "原数组的顺序为:${arr[*]} "
 
#获取数组的长度
length=${#arr[*]}
 
#冒泡排序:
 
#定义比较轮数,为数组长度减一,并且要从1开始
for ((i=1; i<$length; i++))
do
 
#确定每次比较的元素下标,比较相邻2个元素,大的往后放,小的往前放,并且每轮比较的次数要随着轮>
数递减
for ((j=0;j<$length-$i; j++))
do
 
#获取第一个元素的值
first=${arr[$j]}
 
#获取第二个元素的值
k=$[$j+1]
second=${arr[$k]}
 
#比较第一个元素和第二个元素的值,如果第一个元素值大于第二个元素值则两个元素位置交换
if [ $first -gt $second ];then
 
#先把第一个元素的值保存在临时变量temp中
temp=${arr[$j]}
 
#把第二个元素的值赋给第一个元素
arr[$j]=$second
 
#把原来第一个元素的值赋给第二个元素
arr[$k]=$temp
fi
done
done
echo "排序后新的数组的顺序为:${arr[*]}"

3、便利一个指定目录下的所有文件,并打印出来

有一个文件夹路径是 /wls,如果想要遍历这个文件夹内的所有文件,并将它们保存到数组中,利用shell你可以这样做

for file in /wls/*
do
    if test -f $file
    then
        arr=(${arr[*]} $file)
    fi
done
echo ${arr[@]}
两级目录

for file in /wls/*
do
    if test -f $file
    then
        arr=(${arr[*]} $file)
    else
        for subfile in $file
            do
                if test -f $subfile
                then
                    arr=(${arr[*]} $subfile)
                fi
            done
    fi
done
echo ${arr[@]}
如果有多级子目录的情况呢,这就要求我们去写一个function来协助我们,通过递归调用getdir就可以实现将wls文件夹内所有文件的绝对路径保存到数组中

function getdir(){
    echo $1
    for file in $1/*
    do
    if test -f $file
    then
        echo $file
        arr=(${arr[*]} $file)
    else
        getdir $file
    fi
    done
}
getdir /wls
echo ${arr[@]}

4、过滤出日访问量最多的IP来源(前10个),并打印(要求将编写思路和内容说出来)

获取访问日志中每个ip的访问次数

[root@localhost ~]# cat /var/log/httpd/access_log |awk '{print $1}'|sort|uniq  -c
      2 ::1
     10 192.168.153.1
    110 192.168.153.130
      4 192.168.153.149
    119 192.168.153.177
      3 192.168.153.183
     29 192.168.153.185
打印出访问次数前5的ip地址和访问次数
[root@localhost ~]# cat /var/log/httpd/access_log |awk '{print $1}'|sort|uniq  -c|sort -nr|head -5
    119 192.168.153.177
    110 192.168.153.130
     29 192.168.153.185
     10 192.168.153.1
      4 192.168.153.149
 提取访问次数超过20次的页面
[root@localhost httpd]# cat access_log|awk '{print $7}'|sort |uniq -c|awk '{if ($1>20) print $2}'
/
/images/apache_pb.gif
/images/poweredby.png
/noindex/css/bootstrap.min.css
/noindex/css/fonts/Bold/OpenSans-Bold.ttf
/noindex/css/fonts/Bold/OpenSans-Bold.woff
/noindex/css/fonts/Light/OpenSans-Light.ttf
/noindex/css/fonts/Light/OpenSans-Light.woff
/noindex/css/open-sans.css
打印出访问量最大的页面
[root@localhost httpd]# cat access_log|awk '{print $7}'|sort|uniq -c|sort -nr|head -1
     62 /
打印出消耗带宽最大的页面
[root@localhost ~]# cat /var/log/httpd/access_log |awk '{print $7,$10}'|sort -nrk2|uniq|head -1|awk '{print $1}'/noindex/css/bootstrap.min.css



查看传输字节数大于200的资源
[root@localhost httpd]# cat access_log|awk '{print $7,$10}'|sort|uniq|awk '{if ($2>200) print $1}'
/
/favicon.ico
/images/apache_pb.gif
/images/poweredby.png
/noindex/css/bootstrap.min.css
/noindex/css/fonts/Bold/OpenSans-Bold.ttf
/noindex/css/fonts/Bold/OpenSans-Bold.woff
/noindex/css/fonts/Light/OpenSans-Light.ttf
/noindex/css/fonts/Light/OpenSans-Light.woff
/noindex/css/open-sans.css
查看访问次数最多的ip
[root@localhost ~]# cat /var/log/httpd/access_log |awk '{print $1}'|sort|uniq  -c|sort -nr|head -1|cut -f 1
    119 192.168.153.177


查看某一天的独立ip访问数量
[root@localhost httpd]# cat access_log|awk '{print $1}'|sort|uniq|wc -l
7

提取出某一天的PV量
[root@localhost ~]# cat /var/log/httpd/access_log| wc -l
277

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值