编写脚本,提示输入正整数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