课后练习之for循环练习

2021-01-10  本文已影响0人  还没帮马里奥再闯一关

编写脚本,提示输入正整数n的值,计算1+2+…..+n的综合

read -p "请输入一个整数:" num
expr $num + 1 &>/dev/null || (echo "这不是一个整数";exit 10)  
sum=0
for i in `seq 1 $num`; do
    let sum+=i
done
echo sum=$sum

本题重点:如果判断一个整数?这里就要用到expr命令,详解如下
可以使用expr命令+1从而判断返回的$?的值
expr命令一般用于整数值,但也可用于字符串。一般格式为:
expr argument operator argument
#expr也是一个手工命令行计数器。
$expr 10 + 10
20
$expr 1500 + 900
2500
$expr 30 / 3
10
$expr 30 / 3 / 2
5
(注意运算符左右都有空格)
使用乘号时,必须用反斜线屏蔽其特定含义。因为shell可能会误解显示星号的意义。
$expr 30 * 3
90

#判断一个数字是不是整数,可以利用下命的例子
$num=1.1
expr $num+1
expr:non-numeric argument
echo $?
1

$num=1
expr $num+1
2
echo $?
0

(注意:这个例子与原文不同)
这里需要将一个值赋予变量(不管其内容如何),进行数值运算,并将输出导入dev/null,
然后测试最后命令状态,如果为0,证明这是一个数,其他则表明为非数值。
$VALUE=12
expr $VALUE + 10 > /dev/null 2>&1
$echo $?
0
这是一个数字

$VALUE=hello
expr $VALUE + 10 > /dev/null 2>&1
$echo $?
2
这是一个非数值字符。

增量计数
expr在循环中用于增量计算。首先,循环初始化为0,然后循环值加1,反引号的用法意
即替代命令。最基本的一种是从(expr)命令接受输出并将之放入循环变量。
$LOOP=0
$LOOP=`expr $LOOP + 1`

参考:https://blog.csdn.net/qq_40003309/article/details/107282392 【shell中判断是否是整数】

计算100以内所有能被3整除的整数之和

#/bin/bash
declare -i sum=0
for (( n=1; n<100; n++ ));do
  if let n%3==0;then
  sum+=$n
  fi
done
echo $sum

编写脚本,提示请输入网络地址,如192.168.0.0,判断输入的网段中主机在线状态

#!/bin/bash
set -ue

read -p "please input ipaddrs: " net 
[[ $net =~ ^(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$ ]] || (echo "This is not a correct IP address";exit 10) #判断左边的字符串是否和右边的字符串相等,等同于判断了IP地址是否合法
net1=`echo "$net" | egrep -o "^([0-9]+\.){3}"`
for id in {1..254} ;do
    {
    ping -c1 -w1 $net1$id &>/dev/null && echo "$net1$id is up " || echo "$net1$id is down"
    }&
done
wait

打印九九乘法表

#/bin/bash
for i in {1..9};do
    for j in `seq $i`;do
        echo -e "${j}x${i}=$[i*j]\t\c"
    done
    echo
done

⏱ 14:23:42-root:/date/sh# bash 9--9.bak 
1x1=1
1x2=2   2x2=4
1x3=3   2x3=6   3x3=9
1x4=4   2x4=8   3x4=12  4x4=16
1x5=5   2x5=10  3x5=15  4x5=20  5x5=25
1x6=6   2x6=12  3x6=18  4x6=24  5x6=30  6x6=36
1x7=7   2x7=14  3x7=21  4x7=28  5x7=35  6x7=42  7x7=49
1x8=8   2x8=16  3x8=24  4x8=32  5x8=40  6x8=48  7x8=56  8x8=64
1x9=9   2x9=18  3x9=27  4x9=36  5x9=45  6x9=54  7x9=63  8x9=72  9x9=81

在/testdir目录下创建10个html文件,文件名格式为数字N(从1到10)加随机8个字母,如:1AbCdeFgH.html

for num in {1..10};do
  letters=$(head -c 38 /dev/urandom | base64 | tr -dc '[[:alpha:]]' | head -c8
  touch /data/$num$letters.html
done

打印等腰三角形

#/bin/bash
read -p "请输入三角形的行数: " line
for((i=1;i<=line;i++));do
    for((k=0;k<=line-i;k++));do
        echo -e ' \c'
    done
    for((j=1;j<=2*i-1;j++));do
        echo -e '*\c'
    done
    echo
done
[root@centos8 scripts]#bash for_triangle.sh
请输入三角形的行数: 10
         *
         ***
       *****
       *******
     *********
     ***********
   *************
   ***************
 *****************
 *******************

打印等腰三角形(^[0-9]+$必须是数字开头和数字结尾)

read -p "Please input the triangle's height(rows):" height
if ! { echo $height | grep -E '^[0-9]+$' &> /dev/null; };then   
  echo "check your input, and try angain."
  exit
fi
for (( i=1; i<=$height; i++ )) ;do
  for (( j=$height-$i; j>0; j-- ));do
    echo -n ' '
  done
  for (( k=1;k<2*$i; k++ ));do
    echo -n '*'
  done
  echo
done
上一篇下一篇

猜你喜欢

热点阅读