day04shell入门篇之循环,教你一句话写九九乘法表

shell流程控制之循环,教你一句话写九九乘法表


题目
1、9 * 9 乘法表,for列表循环,for循环(c语言风格), while循环,可选单层循环
2、使用for循环创建30个用户: test01~test30, 并设置密码为test01123456~test30123456
3、使用循环去判断网段内的IP(1~254),本机除外,可以ping通的使用 ssh远程登录
4、使用 @ 和 @和 @*作为for循环后的列表,并体现出区别
5、使用循环去读取文件内容并输出: 3中方式(1.exec+while循环 2.管道符+while循环 3.重定向+while)

一,步进循环语句for

for循环是最简单,也是最常用的循环语句。与其他的程序设计语言一样,for循环都是初学者在学习循 环结构时的入门课程。for循环通常用于遍历整个对象或者数字列表。按照循环条件的不同,for循环语 句可以分为带列表的for循环、不带列表的for循环以及类C风格的for循环。

1,带列表的for循环语句

带列表的for循环通常用于将一组语句执行已知的次数,其基本语法如下:

for variable in list
do
statement1
statement2
...
done

在上面的语法中,variable称为循环变量,list是一个列表,可以是一系列的数字或者字符串,元素之间 使用空格隔开。do和done之间的所有的语句称为循环体,即循环结构中重复执行的语句。for循环体的 执行次数与list中元素的个数有关。在带列表的for语句执行时,Shell会将in关键字后面的list列表的第1 个元素的值赋给变量variable,然后执行循环体;当循环体中的语句执行完毕之后,Shell会将列表中的 第2个元素的值赋给变量variable,然后再次执行循环体。当list列表中的所有的元素都被访问后,for循 环结构终止,程序将继续执行done语句后面的其他的语句。

示例

sum=0;
for i in {1..100..2}
do
let "sum+=i"
done
echo "the sum is $sum"
######################
[root@server day04]# sh for_script.sh 
the sum is 2500

2,不带列表的for循环语句

在某些特殊情况下,for循环的条件列表可以完全省略,称为不带列表的for循环语句。如果没有为for循 环提供条件列表,Shell将从命令行获取条件列表。不带列表的for循环语句的一般语法如下:

for variable
do
statement1
statement2
...
done

由于系统变量$@同样可以获取所有的参数,所以以上的语法等价于以下语法:

for variable in $@或$*
do
statement1
statement2
...
done

3,类C风格的for循环语句

for ((expression1;expression2;expression3))
do
statement1;
statement2;
...
done

在上面的语法中,for循环语句的执行条件被2个圆括号包括起来。执行条件分为3个部分,由2个分号隔 开,第1部分expression1通常是条件变量初始化的语句;第2部分expression2是决定是否执行for循环 的条件。当expression2的值为0时,执行整个循环体;当expression2的值为非0时,退出for循环体。 第3部分,即表达式expression3通常用来改变条件变量的值,例如递增或者递减等。

二,while

while循环是另外一种常见的循环结构。使用while循环结构,可以使得用户重复执行一系列的操作,直 到某个条件的发生。这听起来好像跟until循环非常相似,但是与until语句相比,while语句有着较大的 区别。

while循环语句的基本语法如下:

while expression
do
statement1
statement2
...
done

在上面的语法中,expression表示while循环体执行时需要满足的条件。虽然可以使用任意合法的Shell 命令,但是,通常情况下,expression代表一个测试表达式,当expression的值为0时才执行循环体中 的语句,每次执行到done时就会重新判断while条件表达式是否成立,当expression的值为非0值时,将 退出循环体。与其他的循环结构一样,do和done这2个关键字之间的语句构成了循环体。

例题1:

1、9 * 9 乘法表,for列表循环,for循环(c语言风格), while循环,可选单层循环

方法一:一句话九九乘法表
for i in {1..9}
do
    echo `eval "echo -e {1..$i}*$i'\n'|bc -i -q"`
done
###################
[root@server day04]# sh multi_script1.sh 
1*1 1
1*2 2 2*2 4
1*3 3 2*3 6 3*3 9
1*4 4 2*4 8 3*4 12 4*4 16
1*5 5 2*5 10 3*5 15 4*5 20 5*5 25
1*6 6 2*6 12 3*6 18 4*6 24 5*6 30 6*6 36
1*7 7 2*7 14 3*7 21 4*7 28 5*7 35 6*7 42 7*7 49
1*8 8 2*8 16 3*8 24 4*8 32 5*8 40 6*8 48 7*8 56 8*8 64
1*9 9 2*9 18 3*9 27 4*9 36 5*9 45 6*9 54 7*9 63 8*9 72 9*9 81
方法二:for循环(c语言风格)
for i in {1..9}
do
  for j in `eval echo $(echo {1..$i})`
  do
    printf "%d * %d = %2d  " $i $j $[i*j]
  done
  echo "" 
done

例题2:

2、使用for循环创建30个用户: test01~test30, 并设置密码为test01123456~test30123456

for ((i=1;i<=30;i++))
do
if [ $i -lt 10 ]
then
user=test0$i
else
user=test$i
fi
if ! id -u $user &> /dev/null
then
useradd $user
echo "123456" | passwd --stdin $user &> /dev/null
else
echo "$user is exists..."
fi
done
#############
cat /etc/password  //查看创建的用户

例题3:

3、使用循环去判断网段内的IP(1~254),本机除外,可以ping通的使用 ssh远程登录


for ip in 192.168.80.{1..254}
do
    if ping -c 2 $ip &> /dev/null ;then
        echo "$ip is up .."
    else
        echo "$ip is down .."
    fi
done
#################
[root@server day04]# sh for_ssh_script.sh 
192.168.240.1 is down ..
192.168.240.2 is up ..
192.168.240.3 is down ..
192.168.240.4 is down ..
192.168.240.5 is down ..
... ...

例题4:

4、使用 @ 和 @和 @*作为for循环后的列表,并体现出区别

for i in "$@"
do
    echo $i
done

echo "-------------------------"
for j in "$*"
do
    echo $j
done

################
[root@server day04]# sh for_different_script.sh 1 2 3 4 5
1
2
3
4
5
-------------------------
1 2 3 4 5

例题5:

5、使用循环去读取文件内容并输出: 3中方式(1.exec+while循环 2.管道符+while循环 3.重定向+while)

[root@server day04]# cat file_test.txt 
zhangsan
lisi
wangwu
xiaohua

方法一:

1.exec+while循环
exec < file_test.txt
while read file
do
    echo $file
done
##########
[root@server day04]# sh input_script1.sh 
zhangsan
lisi
wangwu
xiaohua

方法二:管道符+while循环

cat file_test.txt | while read file
do
    echo $file
done

########
[root@server day04]# sh input_script2.sh 
zhangsan
lisi
wangwu
xiaohua

方法三:重定向+while

while read file
do
    echo $file
done < file_test.txt
###############
[root@server day04]# sh input_script3.sh 
zhangsan
lisi
wangwu
xiaohua
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值