Linux: 生成数字序列和字母序列

2023-09-27  本文已影响0人  LET149

在shell中生成满足要求的数字序列各和字母序列

1. 使用 { }

1.1 生成连续数字序列
(base) [zhiyong@malab Learn]$ echo {1..7}  #生成从1到7的整数数列,间隔为1,此为默认间隔
1 2 3 4 5 6 7

(base) [zhiyong@malab Learn]$ echo {7..-1}  #生成从7到-1的整数数列,间隔为1
7 6 5 4 3 2 1 0 -1

(base) [zhiyong@malab Learn]$ echo {1..8..2}  #生成从1到8的整数数列,间隔为2,从1开始,到范围之内的最后一个加和结果结束
1 3 5 7
1.2 生成字母序列
(base) [zhiyong@malab Learn]$ echo {a..f}  #生成从a到f的小写字母序列,字母是连续的,间隔为1,此为默认
a b c d e f

(base) [zhiyong@malab Learn]$ echo {a..f..2}  #生成从a到f的小写字母序列,间隔为2的字母序列
a c e

(base) [zhiyong@malab Learn]$ echo {f..a..2}  #生成从f到a的小写字母序列
f d b

(base) [zhiyong@malab Learn]$ echo {A..F}  #生成从A到F的大写字母序列
A B C D E F
1.3 生成组合字母序列
(base) [zhiyong@malab Learn]$ echo {s,f{a..d}{B..E},k,h}  #
s faB faC faD faE fbB fbC fbD fbE fcB fcC fcD fcE fdB fdC fdD fdE k h
1.4 { }中不支持对其他变量的调用
(base) [zhiyong@malab Learn]$ x=8
(base) [zhiyong@malab Learn]$ echo $x
8
(base) [zhiyong@malab Learn]$ echo {1..$x}
{1..8}  #结果并没有生成数字序列

2. 使用 seq

seq仅支持生成数字序列,不支持字母序列的生成

2.1 根据默认生成数字序列
(base) [zhiyong@malab Learn]$ seq 1 5  #默认生成数字序列时,其数字间隔是1,数字间的分隔符是换行符 \n
1
2
3
4
5
2.2 生成按行排列的数字序列
(base) [zhiyong@malab Learn]$ seq -s' ' 1 5 
1 2 3 4 5

-s 来指定分隔符,注意单引号要与 -s 相连,但引号之中的内容是分隔符

2.3 生成指定间隔的数字序列
(base) [zhiyong@malab Learn]$ seq -s' ' 1 3 20  #从1到20,以3为间隔生成数字序列,修改分隔符为空格
1 4 7 10 13 16 19
2.4 不指定起始位置,仅指定终止位置生成分隔符
(base) [zhiyong@malab Learn]$ seq -s' ' 7 
1 2 3 4 5 6 7

当不指定起始位置,只指定终止位置时,默认的起始值为1,默认间隔为1

2.5 调用其他变量生成数字序列
(base) [zhiyong@malab Learn]$ x=3
(base) [zhiyong@malab Learn]$ y=9
(base) [zhiyong@malab Learn]$ seq -s' ' $x $y
3 4 5 6 7 8 9

可以在 seq 中调用其他变量,这一点与 { } 明显区分开

2.6 在for语句中使用seq

for 语句中使用 seq 时,要注意在seq语句的外部加上 $()

for i in $(seq 1 5)
do
    echo "这个数字是:$i"
done
3.0 任意指定一个数字变量

其实是指定一个变量,并给这个变量赋值为以数字为元素的字符串

(base) zhiyong@zhiyong-OptiPlex-7050:~$ aa='2 4 6 7'  #用单引号来定义变量,注意中间空格的使用;也可以用双引号来定义
(base) zhiyong@zhiyong-OptiPlex-7050:~$ echo $aa
2 4 6 7
(base) zhiyong@zhiyong-OptiPlex-7050:~$ for i in $aa; do  echo "hello world"$i"is good"; done
hello world2is good
hello world4is good
hello world6is good
hello world7is good
上一篇 下一篇

猜你喜欢

热点阅读