shell編程練習(二): 筆試11-20


筆試練習(二):

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編程練習"獲取百度網盤鏈接。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM