Linux - seq,&& || ,xargs,数组,点歌脚本

目录

seq

&& ||

xargs

数组

点歌脚本


seq

        作用:打印出一串有序的数列

        print a sequence of numbers

        sequence --》 序列,按顺序排列的数字

        seq [OPTION]... LAST

        seq [OPTION]... FIRST LAST

        seq [OPTION]... FIRST INCREMENT LAST

        默认步长值为1

        步长值可以指定

        -s 指定分隔符 默认是\n

        -w 等宽输出 width ,用0来填充,达到宽度一致

打印1-5的数列

[root@localhost lianxi]# seq 5

1

2

3

4

5

############################################################################

打印 5-10的数列

[root@localhost lianxi]# seq 5 10

5

6

7

8

9

10

############################################################################

打印 1-10 间隔为2

[root@localhost lianxi]# seq 1 2 10

1

3

5

7

9

############################################################################

默认步长是 +1 的如果想产生一个倒着输出的数列

就要修改步长为-1

[root@localhost lianxi]# seq 10 -1 1

10

9

8

7

6

5

4

3

2

1

############################################################################

[root@localhost lianxi]# seq -w 8 13

08

09

10

11

12

13

############################################################################

[root@localhost lianxi]# seq -s + 8 13

8+9+10+11+12+13

seq主要和for循环配合使用,用来控制循环的次数

[root@localhost lianxi]# cat seq.sh
#! /bin/bash
for i in $(seq 5)
do
echo 第$i 次循环
done

############################################################################

&& ||

; 是命令连接符号,可以将多个命令写到一行,不管前面的命令是否执行成功,都会执行

cmd1;cmd2;cmd3

先执行cmd1再执行cmd2再执行cmd3,不管前面的命令是否执行成功,都会执行

cmd1&&cmd2

如果cmd1执行成功,就执行cmd2,如果cmd1执行失败,不执行cmd2

cmd1 || cmd2

如果cmd1执行不成功就执行cmd2,如果cmd1执行成功就不执行cmd2

cmd1 && cmd2 || cmd3

如果cmd1执行超过,就执行cmd2,如果cmd1执行失败就执行cmd3

练习:

1.判读用户feng是否存在,如果存在就设置密码,不存在就新建用户feng

id feng && echo 123456 | passwd feng --stdin || useradd feng

2.判断目录/backup是否存在,如果存在就不新建,不存在就新建/backup目录

[ -d /backup ] || mkdidr /backup

**如何判断目录是否存在?

1.cd

2.ls

3.stat

4.[ -d /backup ]

=============================

-d 判断文件是否是目录 directory

-f 判断文件是否是文件 file

-e 判断文件或者文件夹是否存在 exist

=============================

[ -d /backup ] || mkdidr /backup

############################################################################

xargs

将前面命令的输出送给构面的命令作为参数使用

用途:将参数列表转换成小块分段传递给其他命令

读入stdin的数据转换为参数添加到命令行中

让一些不支持管道的命令可以使用管道

xargs和管道的区别

管道:将前面命令的输出送给后面命令使用

xargs : 将前面命令的输出送给后面的命令作为参数使用

xargs需要依赖管道,知识将前面的命令的输出送给后面的命令作为参数使用而已

更加精确,让一些不支持管道的命令,也可以使用管道了

使用管道,不使用xargs:

[root@localhost lianxi]# which mkdir | ls -l
总用量 837752
-rw-r--r--. 1 root root         4 2月   8 16:59 123.txt
-rw-r--r--. 1 root root         0 2月   8 15:34 1.txt
-rw-r--r--. 1 root root 797264898 1月  26 21:43 2022-01-26-21_42_44-test.tar.gz
-rw-r--r--. 1 root root        56 1月  29 15:07 222.txt
-rw-r--r--. 1 root root        10 2月   8 15:22 2.txt
-rw-r--r--. 1 root root        10 2月   8 15:56 3.txt
-rw-r--r--. 1 root root        94 1月  26 21:42 7777.sh
-rw-r--r--. 1 root root        15 2月   8 16:27 abc.txt
drwxr-xr-x. 2 root root         6 1月  14 21:57 backup
-rw-r--r--. 1 root root       150 1月  25 16:30 backup_log.sh
-rw-r--r--. 1 root root         4 1月  30 16:15 bajie.txt
-rw-r--r--. 1 root root       160 12月  5 16:27 bbigfile.py
-rw-r--r--. 1 root root       134 12月  5 16:12 bigfile.py
-rw-r--r--. 1 root root  49274880 1月  20 20:00 boot.tar.gz
-rw-r--r--. 1 root root       391 1月  30 15:24 company.txt
-rw-r--r--. 1 root root        79 1月  27 20:11 creat_dir.sh
-rw-r--r--. 1 root root       239 1月  29 17:00 create_dir_v2.sh
-rw-r--r--. 1 root root       256 1月  26 16:22 deletefiles.sh
-rw-r--r--. 1 root root       283 1月  26 15:27 dir10_file10.sh

使用xargs:

[root@localhost lianxi]# which mkdir | xargs ls -l
-rwxr-xr-x. 1 root root 79768 8月  20 2019 /usr/bin/mkdir

数组

shell里面只有一维数组

数组使用小元括号括起来

元素的下标从0开始

声明数组

格式:数组名=(参数1 参数2......)参数与参数之间用空格隔开

例:

查看数组的元素

[root@localhost lianxi]# singer=(hudie wangchen jinzhiyan liyu)

[root@localhost lianxi]# echo ${singer[3]} --》输出singer数组里的第4个元素

liyu

查看数组元素的下标

[root@localhost lianxi]# echo ${!singer[@]}

0 1 2 3

查看数组里有多少元素:

[root@localhost script]# echo ${#a[*]}

10

查看数组里面所有元素:

[root@localhost script]# echo ${a[*]}

wang li zhao zhou wu yin chen tang feng wen

[root@localhost script]# echo ${a[@]}

wang li zhao zhou wu yin chen tang feng wen

删除数组元素里的元素

[root@localhost lianxi]# unset singer[2]

[root@localhost lianxi]# echo ${singer[@]}

hudie wangchen liyu

[root@localhost lianxi]# echo ${!singer[@]}

0 1 3

将元素删除以后,后面的元素不会向前面推进

========================================

练习:

取出w命令执行结果里的pts/0这一行里的ip地址,使用数组来完成

[root@localhost script]# w

12:07:17 up 6:45, 3 users, load average: 0.01, 0.03, 0.05

USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT

root tty1 三11 1:21m 1.77s 1.77s -bash

root pts/0 192.168.44.1 三12 18:53m 0.26s 0.26s -bash

root pts/1 192.168.44.1 10:46 5.00s 0.25s 0.03s w

---------------------------

[root@localhost script]# a=($(w|grep pts/0))

[root@localhost script]# echo ${a[2]}

192.168.44.1

############################################################################

点歌脚本

shell版本:

歌手名单 name.txt

[root@localhost script]# cat name.txt 
wang
li
zhao
zhou
wu
yin
chen
tang
feng
wen

#! /bin/bash

# 将name.txt 里面的内容取出来给数组singers
singers=($(cat name.txt))
# 控制循环次数
total=${#singers[*]}
for i in $(seq $total)
do
        lucky_num=$((RANDOM % ${#singers[*]}))
        echo "有请三创歌手 ${singers[$lucky_num]}给大家唱歌!"
        sleep 1
        echo "请以下歌手准备!"
        sleep 1
        unset singers[$lucky_num]
        # 显示还有多少位歌手没有演唱
        echo ${singers[*]}
        # 重新生成一个数组,防止产生随机数抽取不到人
        singers=($(echo ${singers[*]}))

done

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值