shell中的运算
目录
1.运算符号
2.运算指令
练习
1.运算符号
运算符号 | 意义 |
---|---|
+ | 加法 |
- | 减法 |
* | 乘法 |
/ | 除法 |
% | 除法后的余数 |
** | 乘方 |
++ | 自加一 |
- - | 自减一 |
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
= | 等于 |
+= | j+=i ->j=j+i |
*= | j*=i->j=j*i |
/= | j/=i->j=j/i |
%= | j%=i->j=j%i |
2.运算指令
(()) //((a=1+2))
let //let a=1+2 let是一个用于数学计算的Bash shell内置命令,它可以对整数进行加、减、乘、除等操作,并且还可以将计算结果赋值给一个变量
expr //expr 1 + 2 -> 3 expr是一个用于数学计算的UNIX命令,它可以对整数进行加、减、乘、除等操作
bc //计算器
bc << EOF //后续输入作为bc命令中的内容,并在遇到EOF时结束输入,然后将其用作bc命令的输入
1+2
EOF
$[] //echo $[1+2]
printf '%0.2f' .3 ==== 0.30
printf '%0.3f' .3 ====0.300
printf '%0.4f' .3 ====0.3000
练习
1分10秒的倒计时
SEC=10
MIN=1
SECS=$[$MIN*60+$SEC]
for ((;SECS>0;SECS--))
do
SHOW_SEC=$[$SECS%60]
SHOW_MIN=$[$SECS/60]
if [ "$SHOW_SEC" -lt "10" ]
then
echo -ne "After $SHOW_MIN:0$SHOW_SEC is end"
else
echo -ne "After $SHOW_MIN:$SHOW_SEC is end"
fi
sleep 1
echo -ne "\r"
done
计算机随机生成一个1-19之间的整数。
玩家输入数字进行猜测,若猜测正确则游戏结束,若猜测错误则根据实际情况提示“猜小了”或者“猜大了”。
玩家可以输入“exit”结束游戏。
lucky_number=$(($RANDOM % 20))
while true
do
read -p "please input your lucky number(0-19):" GUESS
if [ "$GUESS" = "exit" ]
then
echo "exit"
exit
elif [ "$GUESS" -lt "$lucky_number" ]
then
echo "too small"
elif [ "$GUESS" -gt "$lucky_number" ]
then
echo "too big"
elif [ "$GUESS" = "$lucky_number" ]
then
echo "Bingo!!!" && exit
fi
done
编写一个程序实现网络设备流量的实时监控
要求:支持命令行参数传入网络设备的名称。
每秒钟输出该网络设备的流入流出流量,以byte/s为单位
if [ -z "$1" ]
then
echo please input net device following $0 !!
elif ifconfig $1 &> /dev/null
then
while true
do
RS1=$(awk "/$1/{print \$2}" /proc/net/dev)
TR1=$(awk "/$1/{print \$10}" /proc/net/dev)
sleep 1
RS2=$(awk "/$1/{print \$2}" /proc/net/dev)
TR2=$(awk "/$1/{print \$10}" /proc/net/dev)
echo -ne "Receive: $[$RS2-$RS1], Transmit: $[$TR2-TR1]"
echo -ne "\r"
done
else
echo no
fi
- 调用
hostnamectl
命令设置主机名为node<ID>.su.org
。 - 将IP地址设置为
192.168.81.<ID>
。 - 将
node<ID>.su.org
和192.168.81.<ID>
写入/etc/hosts
文件中。 - 统计当前主机上有多少个网络设备,如果大于1,则提示用户选择要配置的设备。
- 如果用户要为某个设备配置IP,则提示用户输入该设备的IP地址,并将其写入到对应的网络配置文件中。
- 最后,使用
nmcli
重新加载网络连接并启用指定的网络设备。
if [ -z "1" ]
then
echo Please input ID following $0 !!
elif echo $1 | grep -E '^[[:digit:]]{1,}$'
then
echo Please input A number following $0 !!
hostnamectl set-hostname node$1.su.org
echo 192.168.81.$1 node$1.su.org >> /etc/hosts
DEV_COUNT=`nmcli device show | awk 'BEGIN{N=0}/GENERAL.DEVICE/&&!/lo/{N++}END{print N}'`
[ "$DEV_COUNT" -gt "1" ]&&{
for DEVICE in `nmcli device show | awk '/GENERAL.DEVICE/&&!/lo/{print $2}'`
do
read -p "Do you want set $DEVICE: " STATE
case $STATE in
yes|YES|Y|y)
read -p "Please input ip address: " IP
cat > /etc/sysconfig/network-scripts/ifcfg-$DEVICE <<EOF
DEVICE=$DEVICE
ONBOOT=yes
BOOTPROTO=none
IPADDR=$IP
PREFIX=24
NAME=$DEVICE
DNS1=114.114.114.114
EOF
;;
no|NO|n|N)
;;
*)
esac
nmcli connection reload
nmcli connection up $DEVICE
done
}||{
cat > /etc/sysconfig/network-scripts/ifcfg-$DEVICE <<EOF
DEVICE=$DEVICE
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.81.$1
PREFIX=24
NAME=$DEVICE
DNS1=114.114.114.114
EOF
nmcli connection reload
nmcli connection up $DEVICE
}
fi