shell练习(一)

0.打印九九乘法表

[root@localhost ~]# more mul.sh 
#!/bin/bash
for ((num=1; num<=9; num++ ))
do
   for (( i=1; i<=num; i++ ))
   do
    echo -n " $i*$num=$((i*num))"
   done
    echo -e "\n"
done

效果图如下:

[root@localhost ~]# sh mul.sh 
 1*1=1

 1*2=2 2*2=4

 1*3=3 2*3=6 3*3=9

 1*4=4 2*4=8 3*4=12 4*4=16

 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25

 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36

 1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49

 1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64

 1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81

[root@localhost ~]# 

1.批量生成随机字符文件名;在/tmp目录下批量创建10个html文件,其中每个文件需要包含10个随机小写字母加固定字符串tmp
apquvdpqbk_tmp.html
mktemp | awk -F. ‘{print $2}’,利用正则来生成也可

[root@localhost ~]# more html.sh 
#!/bin/bash
for i in {1..10};
 do
 var=`mktemp | awk -F. '{print $2}' | tr "[A-Z]" "[a-z]" | tr "[1-9]" "[a-z]" `
 mkdir -p /tmp/$var\_tmp.html
done
[root@localhost ~]# chmod u+x html.sh
[root@localhost ~]# sh html.sh
[root@localhost ~]# ls /tmp
betvutiwfl_tmp.html
bhoyrb0eit_tmp.htmll
cdgvrbqtud_tmp.html
ddcpgzbfgi_tmp.html
fkndgtj0cp_tmp.html
iiwkfbmbsh_tmp.html
tultpppxqz_tmp.html
vppeadnfrn_tmp.html
wfaiypytpu_tmp.html
wyeecmsjcr_tmp.html
[root@localhost ~]

2.批量修改名称,后缀修改为大写
apquvdpqbk_tmp.html —> apquvdpqbk_tmp.HTML

[root@localhost ~]# more name.sh 
#!/bin/bash
for i in /tmp/*.html
do
 var=`echo $i | awk -F. '{print $1}' ` 
 mv $i $var.HTML
done
[root@localhost ~]# chmod u+x name.sh
[root@localhost ~]#sh name.sh
[root@localhost ~]ls /tmp
betvutiwfl_tmp.HTML
bhoyrb0eit_tmp.HTML
cdgvrbqtud_tmp.HTML
ddcpgzbfgi_tmp.HTML
fkndgtj0cp_tmp.HTML
...(后面省略)
[root@localhost ~]

3.批量创建10个系统帐号user01-user10并设置密码(密码为随机数,要求字符和数字等混合)

[root@localhost ~]# more uname.sh 
#!/bin/bash
for i in {01..10}
do
 useradd user$i 
 echo "[a-z]|[0-9]" | passwd --stdin user$i
done
[root@localhost ~]# sh uname.sh
[root@localhost ~]#more /etc /passwd
user01:x:1000:1000::/home/user1:/bin/bash
user02:x:1001:1001::/home/user2:/bin/bash
user03:x:1002:1002::/home/user3:/bin/bash
user04:x:1003:1003::/home/user4:/bin/bash
user05:x:1004:1004::/home/user5:/bin/bash
user06:x:1005:1005::/home/user6:/bin/bash
user07:x:1006:1006::/home/user7:/bin/bash
user08:x:1007:1007::/home/user8:/bin/bash
user09:x:1008:1008::/home/user9:/bin/bash
user10:x:1009:1009::/home/user10:/bin/bash

4.判断自己的网络里,当前在线的IP有多少

[root@localhost ~]# more ip.sh 
#!/bin/bash
sum=0
for i in {1..254}
do
ping -c2 192.168.0.$i > /dev/null
 if [ $? -eq 0 ]
then
sum=$[$sum+1]
 echo "该ip地址192.168.0.$i在线"
else
 echo "该ip地址192.168.0.$i不在线"
fi
done
echo "当前在线的ip有:$sum"
[root@localhost ~]# chmod u+x ip.sh
[root@localhost ~]# sh ip.sh 
该ip地址192.168.0.1在线
该ip地址192.168.0.2不在线
该ip地址192.168.0.3不在线
该ip地址192.168.0.4不在线
该ip地址192.168.0.5不在线
...(后面省略)
当前在线的ip有:7
[root@localhost ~]# 

5.计算1-100的和

方法一:

[root@localhost ~]# more sum1.sh 
#!/bin/bash
for i in {1..100}
do 
 sum=$[$sum+$i]
done
echo $sum
 [root@localhost ~]# chmod u+x sum1.sh 
[root@localhost ~]# sh sum1.sh 
5050

方法二:

[root@localhost ~]# more sum2.sh 
#!/bin/bash
for ((i=1;i<=100;i++))
do 
sum=$(($sum+$i))
done 
echo $sum
[root@localhost ~]# 

6.把/root/目录下的所有目录 拷贝到/tmp/目录下

[root@localhost ~]# tar -czvf /tmp/.tar.gz /root/* 

7.判断输入的IP是否正确(x.x.x.x)

8.生成1-50内取随机数
$RANDOM

 [root@localhost ~]# echo $(($RANDOM%50))  
43
[root@localhost ~]#

9.每日生成一个文件,格式为2018-05-25-diskinfo.log, 并且把磁盘的使用情况写到到这个文件中

[root@localhost ~]# df -h > `date +%F`-diskinfo.log
[root@localhost ~]#ls
2018-11-14-diskinfo.log (其他文件省略)
[root@localhost ~]# more 2018-11-14-diskinfo.log
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   18G  5.4G   13G  30% /
devtmpfs                 478M     0  478M   0% /dev
tmpfs                    489M     0  489M   0% /dev/shm
tmpfs                    489M  6.8M  482M   2% /run
tmpfs                    489M     0  489M   0% /sys/fs/cgroup
/dev/sda1                197M  103M   95M  53% /boot
tmpfs                     98M     0   98M   0% /run/user/0
[root@localhost ~]# 

10.http的access.log中访问量最多的5个ip

11.可以查看进程的内存占用大小,计算一下所有进程所占用内存大小的和

12.查看/var/log目录下的文件数

[root@localhost ~]# ls -aRl /var/log | grep '^-' | wc -l
38
[root@localhost ~]# 

13.如果查看Linux系统每个ip的连接数

14.shell下生成32位随机密码
方法一:

[root@localhost ~]# openssl rand -base64 32
hdOtxo2KnR5Y0Vad4ghCyaVUs3NWt/z5POndOsEnD+8=
[root@localhost ~]#

方法二:

[root@localhost ~]# date | md5sum
a1852ca96cf07c5c4b6eb30c1db3122e  -

15.简述Linux系统的开机启动顺序

第一步:开机自检
第二步:加载BIOS设置,选择启动盘。这是因为因为BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等。在此之后,计算机心里就有谱了,知道应该去读取哪个硬件设备了。在BIOS将系统的控制权交给启动硬盘第一个扇区之后,就开始由Linux来控制系统了。
第三步:加载磁盘中MBR中的grub
MBR(Master Boot Record):硬盘上第0磁道第一个扇区被称为MBR,即主引导分区,是启动盘的前512字节,里面存放了预启动信息和分区信息。前446个字节,即是grub引导程序后66个字节是分区表的信息。
第四步:加载Linux内核系统到内存当中,运行超级进程/sbin/init进程。在Linux系统中,init进程的进程号永远是1,也就是说,系统中的所有进程的父进程都是init进程。可以使用命令pstree进行查看。
第五步:加载配置文件。init程序启动之后,会读取/etc/inittab文件,来决定系统的运行级别,Linux系统的运行级别有7中,从0-6
   # 0 - 关机模式(千万不要把initdefault设置为0 ,要不然你永远开不了机) 
    # 1 - 单用户模式 (此模式相当于救援模式,内核损坏,root忘记密码等可以使用此模式进行恢复。相当于windows下的安全模式)
    # 2 - 多用户,但是没有NFS 
    # 3 - 完全多用户模式 (文本命令行界面,一般服务器都是此模式)
    # 4 - 保留未使用 
    # 5 - 图形桌面(系统启动之后会进入到图形化桌面系统中)
    # 6 - 重新启动(千万不要把initdefault设置为6 )
平时我们常用的也就是1,3,5。可以使用init 3 ,init 5进行切换。运行级别决定之后,加载相应的配置文件。第一个用户层文件就是/etc/rc.d/rc.sysinit脚本程序,它做的工作非常多,包括设定PATH、设定网络配置(/etc/sysconfig/network)、启动swap分区、设定/proc等等
第六步:加载内核模块,具体是依据/etc/modules.conf文件或/etc/modules.d目录下的文件来装载内核模块。
第七步:根据运行级别,系统会运行rc0.d到rc6.d中的相应的脚本程序,来完成相应的初始化工作和启动相应的服务。
第八步:启动init.d下的系统进程
第九步:出现登录系统的画面。
Linux开启启动完成。

16.如何在文本里面进行复制、粘贴,删除行,删除全部,按行查找和按字母查找

复制:yy (行数yy)    粘贴:p       
删除:dd  (行数dd)  删除全部:rm -rf 
查找:\+字母

17.如何手动安装grub

1. cd /boot/
2. rm -rf grub*    #手动删除grub下的所有文件
3. 以光盘启动引导系统
①Boot-->CD-Rom Driver -->F10-->Yes
②Troubleshooting-->Rescue a Centos System
③enter-->continue-->enter
4. chroot /mnt/sysimage
5. ls /boot
6. grub2-mkconfig -o /boot/grub2/grub.cfg
(若无此目录,则创建 mkdir /boot/grub2
7.grub2-install /dev/sda
8. exit
9. reboot
10.Boot-->+Hard Drive-->F10-->Yes

18.显示/etc/inittab中以#开头,且后面跟了一个或者多个空白字符,而后又跟了任意非空白字符的行

[root@localhost ~]# more /etc/inittab | grep '^#*[[:space:]]\+[^[:space:]].*'
# inittab is no longer used when using systemd.
# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5
# To view current default target, run:
# systemctl get-default
# To set a default target, run:
# systemctl set-default TARGET.target
[root@localhost ~]# 

cat /etc/grub2.cfg | grep “[[:space:]]+[[:space:]].*”
19.history命令显示具体时间

[root@localhost ~]# export HISTTIMEFORMAT='%F %T'
[root@localhost ~]# history
...
  462  2018-11-14 15:49:44history
  463  2018-11-14 15:50:02export HISTTIMEFORMAT='%F %T'
  464  2018-11-14 15:50:09history
...

20.打印3天前的日期

[root@localhost ~]# date -d "3 day ago" +"%F"
2018-11-11
[root@localhost ~]# 

21.一个目录中有很多文件,最快速度查看到最近更新的文件,如何看?

[root@localhost ~]# ls -lt
total 120
-rw-r--r--  1 root root  441 Nov 14 15:12 2018-11-14-diskinfo.log
-rwxr--r--  1 root root   72 Nov 14 15:04 sum2.sh
-rwxr--r--  1 root root   65 Nov 14 15:00 sum1.sh
-rwxr--r--  1 root root  169 Nov 14 14:57 sum.sh
-rwxr--r--  1 root root  112 Nov 14 14:55 uname.sh
-rwxr--r--  1 root root   98 Nov 14 14:42 name.sh
...(后面省略)

22.如何过滤出目录中的所有一级目录(不包含子目录,即只能是一级目录)

[root@localhost ~]# ls -al | grep '^d' | wc -l 
3
[root@localhost ~]# 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值