在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
网友评论