欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

马哥 10_05 _脚本编程之八 脚本完成磁盘分区格式化 有大用

脚本编程控制结构:

    顺序

    选择

        if 

        case

    循环

        for

        while

        until

while CONDITION; do

    statement

    ...

done


进入循环: 条件满足

退出循环: 条件不满足


until CONDITION;do

    statement

    ...

done

进入循环: 条件不满足

退出循环: 条件满足


until 与 while 刚好相反



for 变量 in 列表; do

    循环体

done


expr1;初始化

expr2;条件

expr3;更新

for (( expr1 ; expr2 ; expr3 )); do

    循环体

 done

这种风格近似于C语言

for ((I=1;I<=100;I++))    (在双括号里面小于等于可以这样写<=)

~


image.png

for(要用两种形式)

ping 

    -c (ping的次数)

    -W (超时多少秒退出) (-W 就是wait的意思)

                     -W timeout 

                          Time to wait for a response, in seconds. The option affects only

                          timeout  in  absense  of any responses, otherwise ping waits for

                          two RTTs.



awk: 报告生成工具 (指定分隔符,它能处理对应的段)


image.png

awk是文本处理工具

image.png

awk 把多个空格 当作一个空格,想显示哪一段就显示哪一段,可以使用循环 判断 等各种控制结构

默认分隔符是空格,

    -F指定分隔符 (比如 -F:) (-F:之间可以不用空格 也可以用 或者说 -F : 也行)

(可以只显示偶数行,奇数行)(可以显示偶数行第一段 奇数行最后一段)


awk 'PATTREN{ACTION}' file  (这里使用单引号)

(从文件中每次读一行)

(有点类似于sed)(目的是为了显示所定制的格式)

先讲 ACTION 中最简单的 print

        print $1









image.png


fdisk -d 删除分区的

dd if=/dev/zero of=/dev/sdb bs=512 count=1 (抹掉mbr,就是删除所有分区(清空所有分区),

分区表覆盖掉了,就不可能有分区了,数据在哪儿,其实是没用的)

(太快了,可能对系统有影响)

sync 把所有操作从内存同步到磁盘中去(手动完成同步)

sleep 3   (不睡3秒,可能因为这个操作太快 会有问题 )


RAID

LVM

    逻辑卷的缩减

    扩展

    快照卷




[root@ebs-22618 ~]# vim while2.sh

#!/bin/bash

#

read -p "Input something: " STRING


while [ $STRING != 'quit' ];do

  echo $STRING | tr 'a-z' 'A-Z'

  read -p "Again, Input something: " STRING



done

~



[root@ebs-22618 ~]# chmod +x while2.sh


[root@ebs-22618 ~]# ./while2.sh

Input something: abc

ABC

Again, Input something: quit

[root@ebs-22618 ~]#


[root@ebs-22618 ~]# bash -x while2.sh

+ read -p 'Input something: ' STRING

Input something: abc

+ '[' abc '!=' quit ']'

+ echo abc

+ tr a-z A-Z

ABC

+ read -p 'Again, Input something: ' STRING

Again, Input something: quit

+ '[' quit '!=' quit ']'

[root@ebs-22618 ~]#




[root@ebs-22618 ~]# vim until.sh

#!/bin/bash

#

read -p "Input something: " STRING


until [ $STRING == 'quit' ];do

  echo $STRING | tr 'a-z' 'A-Z'

  read -p "Input something: " STRING

done

~


[root@ebs-22618 ~]# chmod +x until.sh



[root@ebs-22618 ~]# ./until.sh

Input something: abc

ABC

Input something: hello

HELLO

Input something: quit

[root@ebs-22618 ~]#


#!/bin/bash

#

who | grep "hadoop" &> /dev/null

RETVAL=$?


until [ $RETVAL -eq 0 ]; do

  echo "hadoop is not come"

  sleep 5

  who | grep "hadoop" &> /dev/null

  RETVAL=$?

done


echo "hadoop is logged in."


[root@ebs-22618 ~]# who

root     pts/0        2018-08-07 02:07 (114.219.49.213)

[root@ebs-22618 ~]#

[root@ebs-22618 ~]# chmod +x hadoop.sh


image.png




[root@ebs-22618 ~]# vim hadoop2.sh

#!/bin/bash

#


until who | grep "hadoop" &> /dev/null ; do     # while循环时就取反了

  echo "hadoop is not come"

  sleep 5

done


echo "hadoop is logged in."


[root@ebs-22618 ~]# chmod +x hadoop2.sh


[root@ebs-22618 ~]# ./hadoop2.sh

hadoop is not come

hadoop is not come



[root@ebs-22618 ~]# vim 100.sh

#!/bin/bash

#

declare -i SUM=0;

for I in {1..100}; do

  let SUM+=$I

done

echo $SUM


[root@ebs-22618 ~]# chmod +x 100.sh

[root@ebs-22618 ~]# ./100.sh

5050

[root@ebs-22618 ~]# vim  ./100.sh


#!/bin/bash

#

declare -i SUM=0;

for I in {1..100}; do

  let SUM+=$I

done


echo $SUM


declare -i SUM2=0

for ((J=1;J<=100;J++));do

  let SUM2+=$J

done


echo $SUM2


[root@ebs-22618 ~]# ./100.sh

5050

5050

[root@ebs-22618 ~]#


[root@ebs-22618 ~]# vim  ./100.sh

#!/bin/bash

#

declare -i SUM=0;

for I in {1..100}; do

  let SUM+=$I

done


echo $SUM


declare -i SUM2=0

for ((J=1;J<=100;J++));do

  let SUM2+=$J

done


echo $SUM2


declare -i SUM2=0

for ((J=2;J<=100;J+=2));do   //J+=2 可以改成 J++,J++

  let SUM2+=$J

done


echo $SUM2




[root@ebs-22618 ~]# ping 192.168.0.254  (ping 是不会停止的,一直在这儿ping)

image.png


# echo $?


[root@ebs-22618 ~]# man ping

(-c count)发几次ping

image.png





[root@ebs-22618 ~]# ping -c 1 192.168.0.254

PING 192.168.0.254 (192.168.0.254) 56(84) bytes of data.

From 192.168.175.98 icmp_seq=1 Destination Host Unreachable


--- 192.168.0.254 ping statistics ---

1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 3001ms


[root@ebs-22618 ~]#

image.png


[root@ebs-22618 ~]# echo $?

image.png


[root@ebs-22618 ~]# man ping

-W (等待多久超时,就退出)

image.png



[root@ebs-22618 ~]# ping -c 1 -W 1 192.168.0.254

只ping 一次 1 秒钟过去就退出了

PING 192.168.0.254 (192.168.0.254) 56(84) bytes of data.


--- 192.168.0.254 ping statistics ---

1 packets transmitted, 0 received, 100% packet loss, time 1000ms

[root@ebs-22618 ~]# echo $?

image.png



[root@ebs-22618 ~]# ping -c 1 -W 1 192.168.0.254 &> /dev/null

[root@ebs-22618 ~]# echo $?

image.png



[root@ebs-22618 ~]# ping -c 1 -W 1 192.168.0.25 &> /dev/null

[root@ebs-22618 ~]# echo $?

image.png




[root@ebs-22618 ~]# df -Ph (应该是一行一行的显示)

Filesystem      Size  Used Avail Use% Mounted on

/dev/vda1        30G  3.0G   25G  11% /

tmpfs           939M   13M  927M   2% /dev/shm

/dev/vdb1        20G   17G  2.3G  88% /home

[root@ebs-22618 ~]#

image.png


[root@ebs-22618 ~]# df -Ph | cut -d' ' -f1

Filesystem

/dev/vda1

tmpfs

/dev/vdb1



[root@ebs-22618 ~]# df -Ph | cut -d' ' -f2





[root@ebs-22618 ~]#


[root@ebs-22618 ~]# df -Ph | cut -d' ' -f3





[root@ebs-22618 ~]#


[root@ebs-22618 ~]# df -Ph | awk '{print $1}'   (先省掉PATTERN)

Filesystem

/dev/vda1

tmpfs

/dev/vdb1

[root@ebs-22618 ~]# df -Ph | awk '{print $2}'   (先省掉PATTERN)

Size

30G

939M

20G

[root@ebs-22618 ~]#

[root@ebs-22618 ~]# df -Ph | awk '{print $3}'   (先省掉PATTERN)

Used

3.0G

13M

17G

[root@ebs-22618 ~]#


[root@ebs-22618 ~]# df -Ph | awk '{print $1,$3}'   (输出第一段和第三段)(输出时还是默认的分隔符(空白))

Filesystem Used

/dev/vda1 3.0G

tmpfs 13M

/dev/vdb1 17G

[root@ebs-22618 ~]#



[root@ebs-22618 ~]# df -Ph | awk '{print $0}'    ($0就是全部显示,一整行中的所有字段,不是指命令本身)

Filesystem      Size  Used Avail Use% Mounted on

/dev/vda1        30G  3.0G   25G  11% /

tmpfs           939M   13M  927M   2% /dev/shm

/dev/vdb1        20G   17G  2.3G  88% /home

[root@ebs-22618 ~]#

[root@ebs-22618 ~]# df -Ph | awk '{print NF}' (在awk内部,NF是内置变量,指的是 number of fields,字段个数)

7

6

6

6

[root@ebs-22618 ~]#

[root@ebs-22618 ~]# df -Ph | awk '{print $NF}' (在awk内部,NF是内置变量,指的是 number of fields,字段个数,$NF是指最后一个字段)

on

/

/dev/shm

/home

[root@ebs-22618 ~]#


[root@ebs-22618 ~]# awk '{print $1,$3}' /etc/passwd

image.png



[root@ebs-22618 ~]# awk -F: '{print $1,$3}' /etc/passwd  (输出时还是默认的分隔符(空白),这个要记住,输出默认分隔符也要指定,如果不指定,就是空格)

(-F:之间可以不用空格 也可以用 或者说 -F : 也行)

image.png





# fdisk -l

image.png




[root@ebs-22618 ~]# fdisk -l 2>/dev/null   (错误信息不要了)

image.png

image.png


得到磁盘的信息

[root@ebs-22618 ~]# fdisk -l 2> /dev/null | grep "^Disk /dev/[shv]d[a-z]"

Disk /dev/vda: 32.2 GB, 32212254720 bytes

Disk /dev/vdb: 21.5 GB, 21474836480 bytes


得到磁盘

[root@ebs-22618 ~]# fdisk -l 2> /dev/null | grep "^Disk /dev/[shv]d[a-z]" | awk -F: '{print $1}'

Disk /dev/vda

Disk /dev/vdb




# shutdown -h now (关机)   (先关掉这个建立在虚拟机上的linux)

image.png


添加(增加)虚拟硬盘

image.png

image.png

image.png

image.png

image.png

image.png


image.png

image.png

以上步骤 添加了一个IDE的虚拟盘 (IDE的盘是 /dev/hd开头的, 如 hda ,hdb等)

image.png

image.png


image.png

image.png

image.png

image.png

image.png

以上步骤 添加了一个SCSI的虚拟盘 (SCSI是/dev/sd 开头的,如 sda ,sdb等)


image.png启动虚拟机

image.png


image.png

image.png

以上步骤 启动了虚拟机和虚拟机上的linux




# fdisk -l

image.png

image.png


# fdisk -l | grep "^Disk /dev/[sh]d[a-z]"

# fdisk -l 2>/dev/null | grep "^Disk /dev/[sh]d[a-z]"

image.png


# fdisk -l 2>/dev/null | grep "^Disk /dev/[sh]d[a-z]" | awk -F: '{print $1}'

image.png


# vim setpart.sh

image.png

image.png

#!/bin/bash

#

echo 'n

p

1


+20M

n

p

2


+512M

n

p

3


+128M

t

3

82

w' | fdisk /dev/hda






# chmod +x  setpart.sh

# ./setpart.sh

image.png


# fdisk -l

image.png

# dd if=/dev/zero of=/dev/hda bs=512 count=1

# sync

image.png

# partprobe


image.png


# fdisk -l

image.png
































普通分类: