Linux系统——脚本小拓展

目录

如何生成一个20以内的加减法的脚本

echo——标准输出

延伸——建立分区自动换行

date——查看当前系统时间

延伸——cal

seq——打印数值

eval——协助bash完成多次运算


如何生成一个20以内的加减法的脚本

[root@localhost ~]#vim yunsuan.sh

#!/bin/bash
for i in {1..50}
do
a=`echo $[RANDOM%20+1]`
b=`echo $[RANDOM%20+1]`
c=`echo $[RANDOM%20+1]`
sum=$[a+b]
   if [ $sum -le 20 ]
   then
   echo "${a}+${b}"
   fi
done



[root@localhost ~]#bash yunsuan.sh
4+16
3+4
6+8
9+2
4+1
10+1
15+5
10+6
13+6
11+4
4+10
1+1
3+8
1+6
4+11
2+8
10+8
4+3
4+15
7+11
[root@localhost ~]#bash yunsuan.sh
9+4
2+12
5+11
14+5
5+4
2+4
13+2
17+1
7+1
8+1
4+15
12+1
2+8
1+8
1+11
5+6
1+2
1+7
9+3

echo——标准输出

echo可以调整脚本里的格式

echo -n   表示不换行输出
echo -e   表示输出转义符

常用的转义符
选项 作用
\r 光标移至行首,并且不换行
\s 当前shell的名称,如bash
\t 插入Tab键,制表符
\n 输出换行
\f 换行,但光标扔停留在原处
\ 表示插入“ \ ”本身转义
\b 表示退格 不显示前一个字符
\c 抑制更多的输出或不换行
使用转义符必须echo -e
[root@localhost ~]#echo -e "123\b321"
12321
[root@localhost ~]#echo -e "123\b\b321"
1321
[root@localhost ~]#echo -e "123\b\b\b321"
321
#\b 类似于删除键

[root@localhost ~]#echo -e "123\t321"
123	321

#\t 类似于Tab键

[root@localhost ~]#echo -e "123\c321"
123[root@localhost ~]#
#\c 后面的内容都不要了 且删除一个换行

[root@localhost ~]#echo -e "123\n321"
123
321
#\n  表示换行


[root@localhost ~]#echo -e "123\r321"
321
#光标移至行首  并且不换行

延伸——建立分区自动换行

[root@localhost ~]#vim hh.sh

#!/bin/bash
read -p "请输入需要分区的设备名(例子/dev/sdb)" disk

echo -e "n\n\n\n\n+5G\nw\n"|fdisk $disk

#新加一块磁盘
[root@localhost ~]#scan
[root@localhost ~]#lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   60G  0 disk 
├─sda1            8:1    0    5G  0 part /boot
└─sda2            8:2    0   54G  0 part 
  ├─centos-root 253:0    0   50G  0 lvm  /
  └─centos-swap 253:1    0    4G  0 lvm  [SWAP]
sdb               8:16   0   20G  0 disk 
sr0              11:0    1  4.2G  0 rom  

[root@localhost ~]#bash hh.sh 
请输入需要分区的设备名(例子/dev/sdb)/dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

Device does not contain a recognized partition table
使用磁盘标识符 0xf5c0f87b 创建新的 DOS 磁盘标签。

命令(输入 m 获取帮助):Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): Using default response p
分区号 (1-4,默认 1):起始 扇区 (2048-41943039,默认为 2048):将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):分区 1 已设置为 Linux 类型,大小设为 5 GiB

命令(输入 m 获取帮助):The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@localhost ~]#lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   60G  0 disk 
├─sda1            8:1    0    5G  0 part /boot
└─sda2            8:2    0   54G  0 part 
  ├─centos-root 253:0    0   50G  0 lvm  /
  └─centos-swap 253:1    0    4G  0 lvm  [SWAP]
sdb               8:16   0   20G  0 disk 
└─sdb1            8:17   0    5G  0 part 
sr0              11:0    1  4.2G  0 rom

date——查看当前系统时间

-d 你描述的日期,显示指定字符串所描述的时间,而非当前时间

%F 完整日期格式,等价于 %Y-%m-%d

% T 时间(24小时制)(hh:mm:ss)

[root@localhost ~]#date -d 2024-1-31
2024年 01月 31日 星期三 00:00:00 CST
#-d  你描述的日期,显示指定字符串所描述的时间,而非当前时间


[root@localhost ~]#date -d '1 day' +%F-%T
2024-01-26-13:58:21
#加一天     “ - ”  表示分隔符
[root@localhost ~]#date -d '-1 day' +%F-%T
2024-01-24-13:58:52
#减一天     “ - ”  表示分隔符



[root@localhost ~]#date +%F-%T
2024-01-25-13:59:55
#%F  完整日期格式  等价于 %Y-%m-%d
[root@localhost ~]#date
2024年 01月 25日 星期四 14:00:02 CST


[root@localhost ~]#date +%T
14:01:10
#%T 时间(24小时制) (hh:mm:ss)

延伸——cal

你们知道1752年可以白嫖13天的工资吗?

1752年9月之所以少了11天,是因为当时的大英帝国及其美洲殖民地正在从恺撒历法过渡到格里高利教皇历法。恺撒历法的日期比格里高利历法晚11天,因此在1752年9月2日实施新历法后,该月的第2天实际上成为了第14天。这意味着从1752年9月3日至1752年9月13日的11天在历法上是不存在的。这种调整是由英国议会决定的。因此,在计算某一年中各个月份的实际天数时,除了需要考虑是否是闰年之外,还需要特别注意1752年的9月。 

[root@localhost ~]#cal 9 1752
      九月 1752     
日 一 二 三 四 五 六
       1  2 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30



cal可以查看日历

seq——打印数值

[root@localhost ~]#seq 1
1
[root@localhost ~]#seq 1 2 3 
1
3
[root@localhost ~]#seq 10
1
2
3
4
5
6
7
8
9
10
[root@localhost ~]#seq 20
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#打印奇偶
[root@localhost ~]#seq 1 2 10
1
3
5
7
9
[root@localhost ~]#seq 0 2 10
0
2
4
6
8
10
#打印变量
[root@localhost ~]#a=10
[root@localhost ~]#seq $a
1
2
3
4
5
6
7
8
9
10

eval——协助bash完成多次运算

[root@localhost ~]#help eval
eval: eval [参数 ...]
    将参数作为 shell 命令执行。
    
    将 ARGs 合成一个字符串,用结果作为 shell 的输入,
    并且执行得到的命令。
    
    退出状态:
    以命令的状态退出,或者在命令为空的情况下返回成功。
[root@localhost ~]#echo {1..$a}
{1..10}
#bash只能进行一次运算   也就是只能打印1..a(a=10) 不能对{1..10}进行展开
[root@localhost ~]#eval echo {1..$a}
1 2 3 4 5 6 7 8 9 10
[root@localhost ~]#eval echo {20..$a}
20 19 18 17 16 15 14 13 12 11 10

你可能感兴趣的:(linux,运维,服务器)