欢迎各位兄弟 发布技术文章
这里的技术是共享的
脚本编程控制结构:
顺序
选择
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++)) (在双括号里面小于等于可以这样写<=)
~
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: 报告生成工具 (指定分隔符,它能处理对应的段)
awk是文本处理工具
awk 把多个空格 当作一个空格,想显示哪一段就显示哪一段,可以使用循环 判断 等各种控制结构
默认分隔符是空格,
-F指定分隔符 (比如 -F:) (-F:之间可以不用空格 也可以用 或者说 -F : 也行)
(可以只显示偶数行,奇数行)(可以显示偶数行第一段 奇数行最后一段)
awk 'PATTREN{ACTION}' file (这里使用单引号)
(从文件中每次读一行)
(有点类似于sed)(目的是为了显示所定制的格式)
先讲 ACTION 中最简单的 print
print $1
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
[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)
# echo $?
[root@ebs-22618 ~]# man ping
(-c count)发几次ping
[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 ~]#
[root@ebs-22618 ~]# echo $?
[root@ebs-22618 ~]# man ping
-W (等待多久超时,就退出)
[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 $?
[root@ebs-22618 ~]# ping -c 1 -W 1 192.168.0.254 &> /dev/null
[root@ebs-22618 ~]# echo $?
[root@ebs-22618 ~]# ping -c 1 -W 1 192.168.0.25 &> /dev/null
[root@ebs-22618 ~]# echo $?
[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 ~]#
[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
[root@ebs-22618 ~]# awk -F: '{print $1,$3}' /etc/passwd (输出时还是默认的分隔符(空白),这个要记住,输出默认分隔符也要指定,如果不指定,就是空格)
(-F:之间可以不用空格 也可以用 或者说 -F : 也行)
# fdisk -l
[root@ebs-22618 ~]# fdisk -l 2>/dev/null (错误信息不要了)
得到磁盘的信息
[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)
添加(增加)虚拟硬盘
以上步骤 添加了一个IDE的虚拟盘 (IDE的盘是 /dev/hd开头的, 如 hda ,hdb等)
以上步骤 添加了一个SCSI的虚拟盘 (SCSI是/dev/sd 开头的,如 sda ,sdb等)
启动虚拟机
以上步骤 启动了虚拟机和虚拟机上的linux
# fdisk -l
# fdisk -l | grep "^Disk /dev/[sh]d[a-z]"
# fdisk -l 2>/dev/null | grep "^Disk /dev/[sh]d[a-z]"
# fdisk -l 2>/dev/null | grep "^Disk /dev/[sh]d[a-z]" | awk -F: '{print $1}'
# vim setpart.sh
#!/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
# fdisk -l
# dd if=/dev/zero of=/dev/hda bs=512 count=1
# sync
# partprobe
# fdisk -l