笔试练习(二):

11、写一个shell脚本来得到当前的日期,时间,用户名和当前工作目录。

[root@VM_0_5_centos test]# vi 11.sh
[root@VM_0_5_centos test]# cat 11.sh
#!/bin/bash
echo "Hello, $LOGNAME"
echo "Current date is `date`"
echo "User is `who i am`"
echo "Current directory `pwd`"
[root@VM_0_5_centos test]# sh 11.sh
Hello, root
Current date is Tue Jul 24 11:35:23 CST 2018
User is root pts/0 2018-07-24 11:34 (222.211.249.187)
Current directory /test

12、编写shell脚本获取本机的网络地址。

[root@VM_0_5_centos ~]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.27.0.5 netmask 255.255.240.0 broadcast 172.27.15.255
ether 52:54:00:34:12:97 txqueuelen 1000 (Ethernet)
RX packets 18464043 bytes 1387072767 (1.2 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1111041544 bytes 1128965265141 (1.0 TiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
loop txqueuelen 1 (Local Loopback)
RX packets 343083420 bytes 34242325784 (31.8 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 343083420 bytes 34242325784 (31.8 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 [root@VM_0_5_centos test]# vi 12.sh
[root@VM_0_5_centos test]# cat 12.sh
#!/bin/bash
#This script print ip and network IP=`ifconfig eth0 | grep 'inet ' | sed 's/^.*inet//g'| sed 's/ netmask.*$//g'`
NETMASK=`ifconfig eth0 | grep 'inet '| sed 's/^.*netmask//g' | sed 's/broadcast.*$//g'`
echo "IP is $IP"
echo "NETMASK is $NETMASK"
exit 0 [root@VM_0_5_centos test]# sh 12.sh
IP is 172.27.0.5
NETMASK is 255.255.240.0

13、编写个shell脚本将当前目录下大于10K的文件转移到/tmp目录下:

[root@VM_0_5_centos test]# vi 13.sh
[root@VM_0_5_centos test]# cat 13.sh
#/bin/bash # Using for move currently directory lt 10k file to /tmp for FileName in `ls -l | awk '$5>10240 {print $9}'`; do
mv $FileName /tmp
done ls -al /tmp echo "Done! "

14、编写一个名为myfirstshell.sh的脚本,它包括以下内容:

a) 包含一段注释,列出您的姓名、脚本的名称和编写这个脚本的目的。
b) 问候用户。
c) 显示日期和时间。
d) 显示这个月的日历。
e) 显示您的机器名。
f) 显示当前这个操作系统的名称和版本。
g) 显示父目录中的所有文件的列表。
h) 显示root正在运行的所有进程。
i) 显示变量TERM、PATH和HOME的值。
j) 显示磁盘使用情况。
k) 用id命令打印出您的组ID。
m) 跟用户说“Good bye”
[root@VM_0_5_centos test]# vi 14.sh
[root@VM_0_5_centos test]# cat 14.sh
#!/bin/bash user=`whoami`
case $user in
root)
echo "hello root";;
mmzs)
echo "hello mmzs";;
*)
echo "hello $user,welcome"
esac echo "日期和时间: `date`"
echo "本月的日历: `cal`"
echo "本机的机器名:`uname -n`"
echo "当前这个操作系统的名称和版本:`uname -s;uname -r`"
echo "变数TERM的值:$TERM"
echo "变数PATH的值:$PATH"
echo "变数HOME的值:$HOME"
echo "磁盘的使用情况:`df`"
echo "用id命令打印出你的组ID:`id -g`"
echo "root正在运行的所有进程:` ps -u root`"
echo "父目录中的所有文件的列表:`ls ../`"
echo "Good bye!"
exit 0 [root@VM_0_5_centos test]# sh 14.sh
hello root
日期和时间: Thu Jul 26 14:40:40 CST 2018
本月的日历: July 2018
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
本机的机器名:VM_0_5_centos
当前这个操作系统的名称和版本:Linux
3.10.0-693.el7.x86_64
变数TERM的值:xterm
变数PATH的值:/usr/local/mongodb3.0.6/bin:/usr/local/node/8.11.2/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/software/jdk1.7.0_79/bin:/software/jdk1.7.0_79/lib:/root/bin
变数HOME的值:/root
磁盘的使用情况:Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vda1 51474024 45832784 3335164 94% /
devtmpfs 932328 0 932328 0% /dev
tmpfs 941808 24 941784 1% /dev/shm
tmpfs 941808 384 941424 1% /run
tmpfs 941808 0 941808 0% /sys/fs/cgroup
tmpfs 188364 0 188364 0% /run/user/0
用id命令打印出你的组ID:0
root正在运行的所有进程: PID TTY TIME CMD
1 ? 00:00:15 systemd
2 ? 00:00:00 kthreadd
3 ? 00:02:05 ksoftirqd/0
5 ? 00:00:00 kworker/0:0H
……等等 父目录中的所有文件的列表:bin
boot
data
dev
etc
home
install
lib
lib64
opt
proc
root
run
sbin
……等等 Good bye!

15、文件移动拷贝,有m1.txt m2.txt m3.txt m4.txt,分别创建出对应的目录,m1 m2 m3 m4 并把文件移动到对应的目录下。

[root@VM_0_5_centos test]# vi 15.sh
[root@VM_0_5_centos test]# cat 15.sh
#!/bin/bash
touch m1.txt m2.txt m3.txt m4.txt
I=1 while [ $I -le 4 ]; do
mkdir m$I
mv m$I.txt m$I
I=$((I+1))
done [root@VM_0_5_centos test]# sh 15.sh
[root@VM_0_5_centos test]# ll
total 32
-rw-r--r-- 1 root root 128 Jul 26 14:05 11.sh
-rw-r--r-- 1 root root 271 Jul 26 14:15 12.sh
-rw-r--r-- 1 root root 635 Jul 26 14:40 14.sh
-rw-r--r-- 1 root root 131 Jul 26 15:03 15.sh
drwxr-xr-x 2 root root 4096 Jul 26 15:03 m1
drwxr-xr-x 2 root root 4096 Jul 26 15:03 m2
drwxr-xr-x 2 root root 4096 Jul 26 15:03 m3
drwxr-xr-x 2 root root 4096 Jul 26 15:03 m4
[root@VM_0_5_centos test]# cd m1/
[root@VM_0_5_centos m1]# ll
total 0
-rw-r--r-- 1 root root 0 Jul 26 15:03 m1.txt

16、root用户今天登陆了多长时间?

[root@VM_0_5_centos m1]# vi 16.sh
[root@VM_0_5_centos m1]# cat 16.sh
#! /bin/sh cat /proc/uptime| awk -F. '{run_days=$1 / 86400;run_hour=($1 % 86400)/3600;run_minute=($1 % 3600)/60;run_second=$1 % 60;printf("系统已运行:%d天%d时%d分%d秒\n",run_days,run_hour,run_minute,run_second)}'
[root@VM_0_5_centos m1]# sh 16.sh
系统已运行:1天21时53分19秒

17、终端输入一个文件名,判断是否是设备文件?

[root@VM_0_5_centos test]# vi 17.sh
[root@VM_0_5_centos test]# cat 17.sh
#/bin/bash echo -e "The program will Judge a file is or not a device file.\n\n"
read -p "Input a filename:" filename
if [ -b $filename -o -c $filename ]; then
echo "$filename is a device file"
exit 0
else
echo "$filename is not a device file"
exit 1
fi

18、统计IP访问:要求分析apache访问日志,找出访问页面数量在前100位的IP数。日志大小在78M左右。

以下是apache的访问日志节选:

202.101.129.218 - - [26/Mar/2006:23:59:55 +0800] "GET /online/stat_inst.php?pid=d065 HTTP/1.1" 302 20-"-" "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"
[root@VM_0_5_centos test]# mkdir -p 18
[root@VM_0_5_centos test]# mv 18.sh access.log 18
[root@VM_0_5_centos test]# cd 18 [root@VM_0_5_centos 18]# vi 18.sh
[root@VM_0_5_centos 18]# cat 18.sh
#! /bin/bash # $1 为要测试的日志文件
awk '{print $1}' $1 | sort | uniq -c | sort -k1nr | head -n3
[root@VM_0_5_centos 18]# ll
total 20
-rw-r--r-- 1 root root 108 Aug 6 14:58 18.sh
-rw-r--r-- 1 root root 14372 May 20 2015 access.log
[root@VM_0_5_centos 18]# cat access.log
192.168.1.108 - - [23/Dec/2014:06:56:49 +0800] "GET / HTTP/1.1" 200 612 "-" "curl/7.22.0 (i686-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3"
省略更多访问记录…… [root@VM_0_5_centos 18]# sh 18.sh access.log
34 127.0.0.1
16 192.168.1.108
13 192.168.6.254
[root@VM_0_5_centos 18]#

19、设计一个Shell程序,在/userdata目录下建立50个目录,即user1~user50,并设置每个目录的权限,其中其他用户的权限为:读;文件所有者的权限为:读、写、执行;文件所有者所在组的权限为:读、执行。

[root@VM_0_5_centos test]# mkdir -p 19
[root@VM_0_5_centos test]# cd 19
[root@VM_0_5_centos 19]# vi 19.sh
[root@VM_0_5_centos 19]# cat 19.sh
#!/bin/bash
# 需要root权限
echo "create /test/19/tset"
#为方便测试,将/userdata目录修改为/test/19/tset
mkdir /test/19/tset if [ $? -eq 0 ]; then
i=1
while [ $i -le 50 ]; do
mkdir -p /test/19/test/user$i
chmod 754 /test/19/test/user$i
let i++
done
else
echo "bye"
exit 1
fi exit 0 [root@VM_0_5_centos 19]# sh 19.sh
create /usrdata
[root@VM_0_5_centos 19]# cd /test/19/test
[root@VM_0_5_centos test]# ll
total 200
drwxr-xr-- 2 root root 4096 Aug 6 15:03 user1
drwxr-xr-- 2 root root 4096 Aug 6 15:03 user10
drwxr-xr-- 2 root root 4096 Aug 6 15:03 user11
drwxr-xr-- 2 root root 4096 Aug 6 15:03 user12
drwxr-xr-- 2 root root 4096 Aug 6 15:03 user13
drwxr-xr-- 2 root root 4096 Aug 6 15:03 user14
drwxr-xr-- 2 root root 4096 Aug 6 15:03 user15
drwxr-xr-- 2 root root 4096 Aug 6 15:03 user16
drwxr-xr-- 2 root root 4096 Aug 6 15:03 user17
drwxr-xr-- 2 root root 4096 Aug 6 15:03 user18
drwxr-xr-- 2 root root 4096 Aug 6 15:03 user19
drwxr-xr-- 2 root root 4096 Aug 6 15:03 user2
drwxr-xr-- 2 root root 4096 Aug 6 15:03 user20
drwxr-xr-- 2 root root 4096 Aug 6 15:03 user21
drwxr-xr-- 2 root root 4096 Aug 6 15:03 user22
drwxr-xr-- 2 root root 4096 Aug 6 15:03 user23
drwxr-xr-- 2 root root 4096 Aug 6 15:03 user24
drwxr-xr-- 2 root root 4096 Aug 6 15:03 user25
drwxr-xr-- 2 root root 4096 Aug 6 15:03 user26
drwxr-xr-- 2 root root 4096 Aug 6 15:03 user27
drwxr-xr-- 2 root root 4096 Aug 6 15:03 user28
drwxr-xr-- 2 root root 4096 Aug 6 15:03 user29
drwxr-xr-- 2 root root 4096 Aug 6 15:03 user3
drwxr-xr-- 2 root root 4096 Aug 6 15:03 user30
drwxr-xr-- 2 root root 4096 Aug 6 15:03 user31
drwxr-xr-- 2 root root 4096 Aug 6 15:03 user32
drwxr-xr-- 2 root root 4096 Aug 6 15:03 user33
drwxr-xr-- 2 root root 4096 Aug 6 15:03 user34
drwxr-xr-- 2 root root 4096 Aug 6 15:03 user35
drwxr-xr-- 2 root root 4096 Aug 6 15:03 user36
drwxr-xr-- 2 root root 4096 Aug 6 15:03 user37
drwxr-xr-- 2 root root 4096 Aug 6 15:03 user38
drwxr-xr-- 2 root root 4096 Aug 6 15:03 user39
drwxr-xr-- 2 root root 4096 Aug 6 15:03 user4
drwxr-xr-- 2 root root 4096 Aug 6 15:03 user40
drwxr-xr-- 2 root root 4096 Aug 6 15:03 user41
drwxr-xr-- 2 root root 4096 Aug 6 15:03 user42
drwxr-xr-- 2 root root 4096 Aug 6 15:03 user43
drwxr-xr-- 2 root root 4096 Aug 6 15:03 user44
drwxr-xr-- 2 root root 4096 Aug 6 15:03 user45
drwxr-xr-- 2 root root 4096 Aug 6 15:03 user46
drwxr-xr-- 2 root root 4096 Aug 6 15:03 user47
drwxr-xr-- 2 root root 4096 Aug 6 15:03 user48
drwxr-xr-- 2 root root 4096 Aug 6 15:03 user49
drwxr-xr-- 2 root root 4096 Aug 6 15:03 user5
drwxr-xr-- 2 root root 4096 Aug 6 15:03 user50
drwxr-xr-- 2 root root 4096 Aug 6 15:03 user6
drwxr-xr-- 2 root root 4096 Aug 6 15:03 user7
drwxr-xr-- 2 root root 4096 Aug 6 15:03 user8
drwxr-xr-- 2 root root 4096 Aug 6 15:03 user9
[root@VM_0_5_centos test]#

20、设计一个shell程序,添加一个新组为class1,然后添加属于这个组的30个用户,用户名的形式为stdxx,其中xx从01到30,并设置密码为对应的stdxx。

[root@VM_0_5_centos test]# vi 20.sh
[root@VM_0_5_centos test]# cat 20.sh
#!/bin/bash
#设计一个shell程序,添加一个新组为class1,然后添加属于这个组的30个用户,用户名的形式为stdxx,其中xx从01到30。
#请 su root 或者 sudo su 变成root用户 groupadd class1
for i in {9901..9930}; do
xx=`echo $i | sed 's/99//g'`
useradd -g class1 -s /bin/bash -d /home/std$xx -m std$xx
echo -e "std$xx\nstd$xx" | passwd std$xx
echo -e "user std$xx password is std$xx" >> /root/newuser.txt
done

获取脚本

注:所有脚本均可通过关注右侧公众号,后台回复"shell编程练习"获取百度网盘链接。

shell编程练习(二): 笔试11-20的更多相关文章

  1. shell编程(二)

    第三十二次课 shell编程(二) 目录 十五.shell中的函数 十六.shell中的数组 十七.告警系统需求分析 十八.告警系统主脚本 十九.告警系统配置文件 二十.告警系统监控项目 二十一.告警 ...

  2. shell编程练习(一): 笔试1-10

    笔试练习(一): 1.求2个数之和 [root@VM_0_5_centos test]# vi 1.sh [root@VM_0_5_centos test]# cat 1.sh #! /bin/sh ...

  3. shell编程练习(三): 笔试21-30

    笔试练习(三): 21.编写shell程序,实现自动删除30个账号的功能. 账号名为std01至std30. [root@VM_0_5_centos test]# vi 21.sh [root@VM_ ...

  4. shell编程基础(二): shell脚本语法之分支语句和循环语句

    一.分支语句 1.条件测试:test [ 命令test或[可以测试一个条件是否成立,如果测试结果为真,则该命令的Exit Status为0,如果测试结果为假,则命令的Exit Status为1(注意与 ...

  5. 【shell】shell编程(二)-运算符

    上篇我们学会了如何使用及定义变量.按照尿性,一般接下来就该学基本数据类型的运算了. 没错,本篇就仍是这么俗套的来讲讲这无聊但又必学的基本数据类型的运算了. 基本数据类型运算 操作符 符号 语义 描述 ...

  6. shell编程练习(四): 笔试31-68

    笔试练习(四): 31.找查较多的SYN连接 netstat -an | grep SYN | awk '{print $5}' | awk -F: '{print $1}' | sort | uni ...

  7. shell编程基础二

    一.流程控制 while循环:只要条件满足一直循环 read -p "请输入一个数字:" white_data while [ ${white_data} -lt 20 ] do ...

  8. 20道C#练习题(二)11——20题

    11.一个游戏,前20关是每一关自身的分数,1-30关每一关是10分,31-40关,每一关是20分,1-49关,每一关是30分,第50关是100分,输入你现在闯到的关卡数,求你现在拥有的分数.利用if ...

  9. java实现《剑指offer》(二)11~20 更新中

    11.二进制中1的个数 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. (1)最优解 public class Solution { public int NumberOf1(int ...

随机推荐

  1. web项目部署到服务器中浏览器中显示乱码

    项目部署之后浏览器打开查看时页面乱码 这里可能需要修改一下tomcat配置文件,首先找到Tomcat的安装路径下的conf/server.xml文件,找到之后可以CTRL+F搜索如下的内容: < ...

  2. Java当中的IO三

    1.处理流的使用实例 bufferedReader(处理流)介绍: buffereReader属于字符流,其次也是处理流,也是输入流,即字符输入处理流 常用方法 readLine() Buffered ...

  3. 查找datatable 中的重复记录(只查询一个字段)

    StringBuilder str = new StringBuilder(); var res = new ResParameter() { code = ResponseCode.exceptio ...

  4. 电子科技大学实验中学PK赛(一)比赛题解

    比赛来源:第十四届重庆大学程序设计大赛暨西南地区高校邀请赛现场初赛 比赛地址:http://qscoj.cn/contest/24/ A. Comb 自述 分析:统计ACM在题目描述中出现的次数,认真 ...

  5. ASP.NET Core 2.1对GDPR的支持

    欧盟的<通用数据保护条例>(General Data Protection Regulation,以下简称 GDPR)已经于 2018 年 5 月 25 日正式施行.GDPR 涵盖了包括数 ...

  6. placeholde属性在IE10以下浏览器上的兼容方案

    首先,判断浏览器是否支持placeholder属性:目前经验来看placeholder属性在     IE10及以上   才能正常显示,而我们实际项目中往往要求兼容到   IE8 var input ...

  7. div里包含img底部多出3px的解决办法

    如果将一个img放在div里面,你会发现在img下面无端端的就多出3px的空白出来.padding.margin.border都设为0,无效!那么怎么解决这个问题呢? 问题图: 解决后的效果: 这个B ...

  8. 【DFS】n皇后问题

    回溯: 递归调用代表开启一个分支,如果希望这个分支返回后某些数据恢复到分支开启前的状态以便重新开始,就要使用到回溯技巧,全排列的交换法,数独,部分和,用到了回溯.下一个状态在开始之前需要利用到之前的状 ...

  9. Docker for windows : 安装linux

    一.Linux 1.拉取镜像 docker pull hub.c..com/library/oraclelinux:latest 2.创建linux容器 C:\Users\K-Jso>docke ...

  10. java客户端与服务端交互通用处理 框架解析

    一.综述 java 客户端与服务端交互过程中,采用NIO通讯是异步的,客户端基本采用同一处理范式,来进行同异步的调用处理. 处理模型有以下几个要素: 1. NIO发送消息后返回的Future 2. 每 ...