shell编程二

news/2024/9/22 22:19:20/文章来源:https://www.cnblogs.com/daofaziran/p/18425128

4.3.4.2 特殊变量-状态变量

1. windows下书写的脚本,脚本文件复制到Linux执行异常的故障案例

'''
现象:windows下书写的脚本,上传到Linux执行报错.
原因:windows下面的回车换行\r\n ,linux下面回车换行\n
解决:替换结束标记即可.dos2unix windows-->linux
'''[root@ubuntu2204 /server/scripts/shell-pro]# bash check_n_t.sh 
check_n_t.sh: line 3: $'\r': command not found
check_n_t.sh: line 4: $'\r': command not found# 替换结束标记
[root@ubuntu2204 /server/scripts/shell-pro]# dos2unix check_n_t.sh 
dos2unix: converting file check_n_t.sh to Unix format...[root@ubuntu2204 /server/scripts/shell-pro]# 
[root@ubuntu2204 /server/scripts/shell-pro]# bash check_n_t.sh 
Usage: check_n_t.sh 用户名
[root@ubuntu2204 /server/scripts/shell-pro]# 
[root@ubuntu2204 /server/scripts/shell-pro]# bash check_n_t.sh xk
xk 存在
[root@ubuntu2204 /server/scripts/shell-pro]# bash check_n_t.sh xk5
xk5 不存在
[root@ubuntu2204 /server/scripts/shell-pro]# 

2. 通过脚本传参方式输入任何一个命令并执行,检查这个 命令的执行结果是否正确。

分析:输入命令(传参)判断脚本参数个数如果为0则报错与退出执行命令 $@检查结果 $?if判断如果是0,成功.输出成功if判断如果不是0,则失败.显示失败.最后给成功和失败提示加上颜色.

 

[root@Kylin-V10-sp3 /server/scripts/shell-pro]# cat check_scripts.sh 
#!/bin/bash
##############################################################
# File Name:check_scripts.sh
# Version:V1.0
# Author:xk
# Organization: none
# Desc:
##############################################################scripts="$@"if [ $# -eq 0 ];thenecho '请输入命令'exit
fi${scripts} >/dev/null 2>&1if [ $? -eq 0 ] ;thenecho ${scripts}":执行成功"
elseecho ${scripts}":执行失败"
fi
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# 
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# sh check_scripts.sh 
请输入命令
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# 
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# sh check_scripts.sh tree / -L 1   
tree / -L 1:执行成功
[root@Kylin-V10-sp3 /server/scripts/shell-pro]#  
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# sh check_scripts.sh tre
tre:执行失败

4.3.4.3 特殊变量-变量子串

  • 变量子串 parameter expension变量扩展
  • 格式${变量},写为$变量形式无法识别
  • **作用:用于对变量处理,加工。(统计变量中字符串数量,对变量内容进行替换,删除。。。)
  • 应用:可以不用,如果使用效率高,格局打开.
# 变量子串(parameter表示变量名字)     含义# 基础
${parameter} $para                   变量取值
${#parameter}                        # 统计字符长度(变量中有多少个字符)# 删除(开头,结尾)                 word表示要删除的内容
${parameter#word}                    # 从变量左边开始删除,按照最短(第1个)匹配删除
${parameter##word}                   从变量左边开始删除,按照最长(贪婪)匹配删除
${parameter%word}                    从变量右边开始删除,按照最短匹配删除
${parameter%%word}                   从变量右边开始删除,按照最长匹配删除# 截取(切片)类似于 cut -c
${var:5}
${var:5:2}                           # 从下标是5字符开始向后截取2个字符# 替换 阉割版的sed
${para/word/replace}                 # 把word替换为replace 仅替换第1个
${para//word/replace}                把word替换为replace 替换全部
4.3.4.3.1 练习
# 1.统计字符串长度
[root@Kylin-V10-sp3 ~]# teacher=xiaoming
[root@Kylin-V10-sp3 ~]# echo ${#teacher}
8
[root@Kylin-V10-sp3 ~]# # 2. 删除变量中的内容(仅影响输出)
[root@Kylin-V10-sp3 ~]# teacher=xiaoming12345688
[root@Kylin-V10-sp3 ~]# echo $teacher
xiaoming12345688
[root@Kylin-V10-sp3 ~]# 
[root@Kylin-V10-sp3 ~]# echo ${teacher#xiaoming}
12345688
[root@Kylin-V10-sp3 ~]# echo ${teacher#x}
iaoming12345688
[root@Kylin-V10-sp3 ~]# echo ${teacher#i}
xiaoming12345688
[root@Kylin-V10-sp3 ~]# echo ${teacher#*x}
iaoming12345688
[root@Kylin-V10-sp3 ~]# echo ${teacher#*i}
aoming12345688
[root@Kylin-V10-sp3 ~]# echo ${teacher##*i}
ng12345688
[root@Kylin-V10-sp3 ~]# 
[root@Kylin-V10-sp3 ~]# dir=/etc/sysconfig/network-scripts/ifcg-eth0
[root@Kylin-V10-sp3 ~]# 
[root@Kylin-V10-sp3 ~]# echo ${dir##*/}
ifcg-eth0
[root@Kylin-V10-sp3 ~]# echo ${dir%/*}
/etc/sysconfig/network-scripts
[root@Kylin-V10-sp3 ~]## 3. 截取(切片)
[root@Kylin-V10-sp3 ~]# echo ${teacher}
xiaoming12345688
[root@Kylin-V10-sp3 ~]# echo ${teacher:4}
ming12345688
[root@Kylin-V10-sp3 ~]# echo ${teacher:4:2}
mi
[root@Kylin-V10-sp3 ~]# echo ${teacher:4:}  # 无输出[root@Kylin-V10-sp3 ~]# echo ${teacher:4:30}
ming12345688
[root@Kylin-V10-sp3 ~]# echo ${teacher} | cut -c1-3
xia
[root@Kylin-V10-sp3 ~]# echo ${teacher} | cut -c1
x
[root@Kylin-V10-sp3 ~]# echo ${teacher} | cut -c1-20
xiaoming12345688
[root@Kylin-V10-sp3 ~]# # 4 替换
[root@Kylin-V10-sp3 ~]# echo ${teacher/i/o-}
xo-aoming12345688
[root@Kylin-V10-sp3 ~]# echo ${teacher/i/o}
xoaoming12345688
[root@Kylin-V10-sp3 ~]# echo ${teacher//i/o}
xoaomong12345688
[root@Kylin-V10-sp3 ~]# 

面试题

查看代码
 '''
要求:bash for循环打印下面这句话中字母数大于6的单词(昆仑万维面试题)。
shell思路:
1. 脚本创建变量存放内容或脚本传参
2. 处理下数据,把数据里面的特殊符号替换为空格.
3. 循环+判断.
4. 满足条件则输出
length() awk函数用于统计某一列或整行的字符数量
${#var}
'''# 1.使用${#变量}
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# cat check_str.sh 
#!/bin/bash
##############################################################
# File Name:check_str.sh
# Version:V1.0
# Author:xk
# Organization: none
# Desc:
###############################################################1. 脚本创建变量存放内容或脚本传参
str0="We are the successors of socialism."#2. 处理下数据,把数据里面的特殊符号替换为空格.
str=${str0/./ }# 3. 循环+判断.
for i in $str
do# 4. 满足条件则输出if [ ${#i} -ge 6 ];thenecho $i "长度大于6,为:" ${#i}fi
done[root@Kylin-V10-sp3 /server/scripts/shell-pro]# 
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# bash check_str.sh 
successors 长度大于6,为: 10
socialism 长度大于6,为: 9# 使用awk
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# echo "We are the successors of socialism." |xargs -n1 |awk -F"[ .]" 'length($1)>=6'
successors
socialism.
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# echo "We are the successors of socialism." |xargs -n1 |awk -F '[ .]' '{print$1}'
We
are
the
successors
of
socialism
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# echo "We are the successors of socialism." |xargs -n1 |awk -F '[ .]' '{print$1}' | awk 'length($1)>=6'
successors
socialism
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# echo "We are the successors of socialism." |xargs -n1 |awk -F '[ .]' '{print$1}' | awk 'length($1)>=6 {print $1}'
successors
socialism
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# '''
在 awk 命令行中,-v RS= 选项用于设置输入记录分隔符(Record Separator, RS)为空字符串。这通常用于处理多行文本记录,
其中记录之间没有明显的分隔符(如换行符)。当 RS 被设置为空字符串时,awk 会将连续的空白行视为记录分隔符,或者更准确地说,
它会将任意长度的空白行序列视为单个记录分隔符。在Linux中,xargs命令是一个非常强大的工具,用于从标准输入(stdin)构建并执行命令。xargs读取来自标准输入的数据,
然后将这些数据作为参数传递给指定的命令。-n1选项是xargs命令的一个重要选项,它告诉xargs每次只从输入中读取一个项目(即一个参数),
并将这个参数传递给指定的命令。
'''
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# echo "We are the successors of socialism." | awk -vRS=" " 'length()>=6'
successors
socialism.
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# 

 

4.3.4.3.2 变量子串-小结

  • 变量子串这部分整体熟悉: ${#变量} ${替换}
  • 掌握几个:计算变量字符串长度,替换。
  • 了解: 删除,截取.
  • man bash 搜索 Parameter Expansion

4.3.4.4 特殊变量-变量扩展(设置默认值)

给变量设置默认值

格式

含义

${parameter:- word}

变量parameter没定义或为空,把word作为默认值,不修改变量内容(输出)

${parameter:=word}

变量parameter没定义或为空,把word作为默认值,修改变量内容

${parameter:?word}

变量parameter没定义或为空,显示word,错误输出

${parameter:+word}

变量parameter没定义或为空,则啥也不做,否则把word替换变量内容

 

查看代码
 # :-
# 空值或者未创建该变量
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# echo $name  [root@Kylin-V10-sp3 /server/scripts/shell-pro]# echo ${name:-xiaohong}
xiaohong
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# echo $name[root@Kylin-V10-sp3 /server/scripts/shell-pro]# name=xiao
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# echo ${name:-xiaohong}
xiao
[root@Kylin-V10-sp3 /server/scripts/shell-pro]## :=
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# echo $name1[root@Kylin-V10-sp3 /server/scripts/shell-pro]# 
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# echo ${name1:=xiaohong}
xiaohong
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# echo $name1
xiaohong
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# name1=xiaohua
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# 
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# echo $name1
xiaohua
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# # :+
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# echo $name3
xiaobai1
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# 
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# echo ${name3:+xiaobai}
xiaobai
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# 
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# echo $name3
xiaobai1
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# 

4.3.4.5特殊变量小结

  • 为shell编程增光添彩.
  • 整体要认识。
  • man bash PARAMETERS

常用特殊变量

必会

了解

位置变量

$n $0 $# $@ $*

区别$@ $*

状态变量

$?

$$ $_ $!

变量子串

${#parameter}

${parameter/x/y}

除了前面的${para#xxx}

变量扩展(变量默认值)

${para:-word}

4.4 变量总结

变量命名,要求
变量基础操作,赋值,取值.
金庸新作 ${变量}
变量分类普通环境变量:PATH,LANG,PS1,UIDexport命令创建或修改环境变量特殊变量 $n $0 $# $* $@ $?

各种判断条件:

eq                 # 等于
ne                 # 不等于
lt less than <     # 小于
le less equal <=   # 小于等于
gt great than >    # 大于
ge great equal >=  # 大于等于

4.5 变量赋值

4.5.1 变量赋值语句

4.5.1.1 向变量中写入内容

赋值方法

格式

应用场景

直接赋值

name=xiaobai

大部分时候使用

命令结果赋值

hostname=`hostname`

获取命令的结果 `` 或$()

脚本传参(通过脚本命令行传参进行赋值)

user_name=$1 脚本的第1个参数

usernames=" $*"

一般用于命令行内容传入脚本中. 不想设置太多交互.

read交互式赋值

通过read命令实现

与用户有个交互过程

读取文件内容赋值给变量

未来循环中说

脚本读取文件的时候使用.

4.5.1.2 read

read通过交互式的方式进行赋值

 

-p

交互的时候提示信息。

-t (timeout)

超过这个时间没有操作,则自动退出.

-s

不显示用户的输入.记录密码才用

4.5.1.3 基本用法

[root@Kylin-V10-sp3 /server/scripts/shell-pro]# read -p "请输入用户名: "  user
请输入用户名: root
[root@Kylin-V10-sp3 /server/scripts/shell-pro]#

4.5.1.4 不显示用户的输入

[root@Kylin-V10-sp3 /server/scripts/shell-pro]# read -t5 -p "请输入用户名: " user
请输入用户名: [root@Kylin-V10-sp3 /server/scripts/shell-pro]# 
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# 
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# read -t5 -s -p "请输入用密码: " pwd
请输入用密码: [root@Kylin-V10-sp3 /server/scripts/shell-pro]# 
[root@Kylin-V10-sp3 /server/scripts/shell-pro]#

4.5.1.5 同时向2个变量赋值

# 类似 num1 num2: 2 3
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# read -p "请输入两个数字,如:10 20:  " num1 num2
请输入两个数字,如:10 20:  2 3
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# echo $num1 $num2
2 3
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# 

书写脚本检查输入的域名(1个或多个)是否可 ping(通过read方式实现)

# 使用read的时候用$#接收变量[root@Kylin-V10-sp3 /server/scripts/shell-pro]# cat check_url.sh 
#!/bin/bash
##############################################################
# File Name:check_url.sh
# Version:V1.0
# Author:xk
# Organization: none
# Desc:
##############################################################read -p "请输入ip或者域名:" ipif [ ${#ip} -eq 0 ];thenecho "ip或域名不能为空!!!"exit
fiping -c1 -W 2 ${ip} >/dev/null 2>&1if [ $? -eq 0 ];thenecho ${ip} "可以ping通"
elseecho ${ip} "ping不通"
fi	[root@Kylin-V10-sp3 /server/scripts/shell-pro]# bash check_url.sh
请输入ip或者域名:qq.com
qq.com 可以ping通
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# 

 

赋值方式

read

$1 $2 用$* 或$@接收(如:url="$@")

共同点

变量赋值

变量赋值

区别

与用户交互的地方(一问一答)

命令行传参,命令行脚本后面指定.

5. Shell编程必知必会的运算

  • 目标:通过shell脚本+awk和其他方式,实现在脚本中进行统计与计算.
  • 主要内容:
    • 运算符.
    • 运算的命令和符号.

5.1 运算符

shell-运算符

含义

+

加法符号

-

减法符号
* 乘法符号
/ 除法符号

%

取余,可以用于生成指定范围的随机数.

^或** 幂、指数

2^10=1024 10个2相乘.

i=i+1 i++

计数,计算次数

j=j+1 j+=1 (数字累加)   

j=j+$1 j+=$1 (变量累加)

求和,累加

&&

并且,前一个命令执行成功,再执行后面的命令(判断)

||

或者,前一个命令执行失败了,再执行后面的命令(判断)

 

查看代码
 #1. % 生成指定范围的随机数.
#随机的数字(n)对一个数字取余可以得到0到n-1范围的随机数。
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# echo $RANDOM%5 |bc
3
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# echo $RANDOM%5 |bc
4
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# echo $RANDOM%5
31826%5# 2. &&
# 检查目录是否存在
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# ls /etc/ >/dev/null 2>&1 && echo "目录存在"
目录存在# 3. ||
# 没有则创建
root@Kylin-V10-sp3 /server/scripts/shell-pro]# tree -L 1 /root/
/root/
├── 1.py
├── 1.sh
├── anaconda-ks.cfg
├── app
├── app2
├── awkprof.out
├── conf_2024-09-11_3.tar.gz
├── hosts
├── http-dns.pcap
├── initial-setup-ks.cfg
└── test3 directories, 8 files
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# ls /etc/abc/ >/dev/null 2>&1 || mkdir -p /root/abc/
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# 
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# tree -L 1 /root/
/root/
├── 1.py
├── 1.sh
├── abc
├── anaconda-ks.cfg
├── app
├── app2
├── awkprof.out
├── conf_2024-09-11_3.tar.gz
├── hosts
├── http-dns.pcap
├── initial-setup-ks.cfg
└── test4 directories, 8 files
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# 

5.2 运算方法⭐⭐⭐⭐⭐

运算的命/符号

说明

应用场景

awk

可以进行计算,带小数,可以与shell脚本进行变量传递

一般计算都可以用awk

bc

带小数

一般计算都可以用bc. 需要安装

expr

进行计算,整数

一般用于检查输入内容是否为数字(方法之一).

let

进行计算,整数,变量直接使用即可 用于计算i++

$(())

进行计算,整数,变量直接使用即可

 

$[]

进行计算,整数,变量直接使用即可

 

5.2.1 awk进行计算

5.2.1.1 在awk中使用shell变量

[root@Kylin-V10-sp3 ~]# awk -vn1=10 -vn2=20 'BEGIN{print n1+n2}'
30
[root@Kylin-V10-sp3 ~]# 
[root@Kylin-V10-sp3 ~]# num1=10
[root@Kylin-V10-sp3 ~]# num2=20
[root@Kylin-V10-sp3 ~]# 
[root@Kylin-V10-sp3 ~]# awk -vn1=$num1 -vn2=$num2 'BEGIN{print n1+n2}'
30

awk -v选项用于创建或修改awk中的变量。-v是shell脚本与awk桥梁在awk中各种变量直接使用即可,不要加上$n1,如果加上了会被awk识别为取列.

5.2.2.bc

基本用法. -l显示小数.

# 基本用法. -l显示小数.
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# echo 1+2 | bc -l
3
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# echo 2^9 | bc -l
512
[root@Kylin-V10-sp3 /server/scripts/shell-pro]#

5.2.2.1 计算器

传入脚本中2个参数,进行计算,输出结果。

思路

1. 用户传入2个参数
2. 判断是否为数字,如果不是,显示提示信息然后脚本结束.增加个判断脚本参数个数是2.(这个判断与上面的重复,可以省略)
3. 进行计算,输出结果(awk,bc)

awk实现

脚本传参&&交互式传参
 # 1. 脚本传入参数#!/bin/bash
##############################################################
# File Name:num_calc_param_awk.sh
# Version:V1.0
# Author:xk
# Organization: none
# Desc:
###############################################################vars
num1=$1
num2=$2#判断为整数
n1=`[[ $num1 =~ ^[0-9]+$ ]] && echo 0 || echo 1`  # 0 是整数
n2=`[[ $num2 =~ ^[0-9]+$ ]] && echo 0 || echo 1`if [ $n1 -eq 1 -o $n2 -eq 1 ];then  # -o 在[]里表示orecho "请输入整数"exit
fi# 计算
add=`awk -vn3=$num1 -vn4=$num2 'BEGIN {print n3 + n4}'`
subtract=`awk -vn3=$num1 -vn4=$num2 'BEGIN {print n3 - n4}'`
mult=`awk -vn3=$num1 -vn4=$num2 'BEGIN {print n3 * n4}'`
if [ $num2 -eq 0 ]; thenecho  $num2 "不能作为除数"
elsedivide=`awk -vn3=$num1 -vn4=$num2 'BEGIN {print n3 / n4}'`
fi# 输出
cat <<EOF
$num1 + $num2 = $add 
$num1 - $num2 = $subtract
$num1 * $num2 = $mult
$num1 / $num2 = $divide
EOF
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# 
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# bash num_calc_param_awk.sh 
请输入整数
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# bash num_calc_param_awk.sh 10 20
10 + 20 = 30 
10 - 20 = -10
10 * 20 = 200
10 / 20 = 0.5
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# # 2. 交互式传入参数
#!/bin/bash
##############################################################
# File Name:num_calc.sh
# Version:V1.0
# Author:xk
# Organization: none
# Desc:
############################################################### 输入
read -p "请输入需要计算的内容,如: 100 20    " num1 num2# 检查是否为数字
n1=`[[ $num1 =~ ^[0-9]+$ ]] && echo 0 || echo 1`
n2=`[[ $num2 =~ ^[0-9]+$ ]] && echo 0 || echo 1`if [ $n1 -eq 1 -o $n1 -eq 1 ];then  # n1 n2 只要一个不是整数就退出echo "请输入整数"exit
fi# 计算
add=`awk -vn3=$num1 -vn4=$num2 'BEGIN {print n3 + n4}'`
subtract=`awk -vn3=$num1 -vn4=$num2 'BEGIN {print n3 - n4}'`
mult=`awk -vn3=$num1 -vn4=$num2 'BEGIN {print n3 * n4}'`
if [ $n2 -eq 0 ];thendivide=`awk -vn3=$num1 -vn4=$num2 'BEGIN {print n3 / n4}'`
elseecho $num2 "不能作为除数"
fi# 输出
cat <<EOF
$num1 + $num2 = $add
$num1 - $num2 = $subtract
$num1 * $num2 = $mult
$num1 / $num2 = $divide
EOF[root@Kylin-V10-sp3 /server/scripts/shell-pro]# 
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# bash num_calc_read_awk.sh 
请输入需要计算的内容,如: 100 20    100 40
100 + 40 = 10
100 - 40 = 60
100 * 40 = 4000
100 / 40 = 2.5
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# 

bc实现

 

num_calc_read_bc.sh
 #!/bin/bash
##############################################################
# File Name:num_calc_read_bc.sh
# Version:V1.0
# Author:xk
# Organization: none
# Desc:
############################################################### 输入
read -p "请输入需要计算的内容,如: 100 20    " num1 num2# 判端是否为整数
n1=`[[ $num1 =~ ^[0-9]+$ ]] && echo 0 || echo 1`
n2=`[[ $num2 =~ ^[0-9]+$ ]] && echo 0 || echo 1`if [ $n1 -eq 1 -o $n2 -eq 1 ];thenecho "请按照格式输入整数"
fi# 计算
add=`echo $num1 + $num2 | bc -l`
subtract=`echo $num1 - $num2 | bc -l`
mult=`echo $num1*$num2 | bc -l`if [ $num2 -eq 0 ];thenecho $num2 "不能为除数"
elsedevide=`echo $num1 / $num2 | bc -l`
fi# 输出
cat << EOF
$num1 + $num2 = $add
$num1 - $num2 = $subtract
$num1 * $num2 = $mult
$num1 / $num2 = $devide
EOF[root@Kylin-V10-sp3 /server/scripts/shell-pro]# 
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# bash num_calc_read_bc.sh 
请输入需要计算的内容,如: 100 20    200 10
200 + 10 = 210
200 - 10 = 190
200 * 10 = 2000
200 / 10 = 20.00000000000000000000
[root@Kylin-V10-sp3 /server/scripts/shell-pro]# 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/801739.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

execve

目录glibc glibc execve() 执行由 pathname 指定的程序。这会导致当前正在被调用进程运行的程序被一个新程序替换,且该新程序会重新初始化栈、堆,以及(已初始化和未初始化的)数据段。

freeRTOS源码解析4--tasks.c 5

4.2.13 继续任务--vTaskResume 接口:void vTaskResume( TaskHandle_t xTaskToResume )形参1:xTaskToResume ,想要继续的任务handle; 首先是vTaskResume调用的一个内部函数:static BaseType_t prvTaskIsTaskSuspended( const TaskHandle_t xTask ),用于检查任务是否是挂起…

MySQL 必知概念

Delete、Drop 和 Truncatedelete、truncate 仅仅删除表里面的数据,drop会把表的结构也删除 delete 是 DML 语句,操作完成后,可以回滚,truncate 和 drop 是 DDL 语句,删除之后立即生效,不能回滚 执行效率:drop > truncate > deleteMyISAM 与 InnoDBInnoDB 支持事务…

视野修炼-技术周刊第102期 | js 编译运行C

① Bun 现在允许直接在js中直接编译运行 C ! ② caniuse-cli ③ SSL证书管理工具 ④ 好的重构与坏的重构 ⑤ sisi - 命令行图片检索工具 ⑥ cvbee.ai - AI 简历生成欢迎来到第 102 期的【视野修炼 - 技术周刊】,下面是本期的精选内容简介 🔥强烈推荐Bun 现在允许直接在js中…

【vulhub】Discuz-命令执行 wooyun-2010-080723

【vulhub】Discuz-命令执行 wooyun-2010-080723 ​docker-compose up-d​启动! ​​ wooyun-2010-080723 命令执行 0x01 搭建环境 访问192.168.132.138:8080/install​,安装数据库。数据库服务器填写db(必须db,不然安装失败),数据库名为discuz,数据库账号密码均为root,…

华科python与人工智能实践(公选)教程

python基础 软件下载 1.python下载安装 点击此链接进入官网windows下载地址点击箭头处链接下载最新版本,进入页面后下拉根据你的机器下载对应版本,一般人使用的是X86架构windos系统,下载箭头所指即可 若是不知道CPU架构,可见查看cpu架构,x86还是arm 下载后根据指引进行安装…

2376.统计特殊整数

如果一个正整数每一个数位都是 互不相同 的,我们称它是 特殊整数 。 给你一个 正 整数 n ,请你返回区间 [1, n] 之间特殊整数的数目。 示例 1: 输入:n = 20 输出:19 解释:1 到 20 之间所有整数除了 11 以外都是特殊整数。所以总共有 19 个特殊整数。 示例 2: 输入:n = …

数业智能心大陆:职场倦怠的新解法

什么是职业倦怠? 在职场中,职业倦怠的表现形式丰富多样。从数业智能心大陆 AI 心理咨询平台的数据来看,职业倦怠呈现出多种状态。教师可能对教学不再满怀热情,精心备课也成为过去式;情绪上容易烦躁、易怒,在工作压力之下,常常因为一些小事就被激怒。比如在项目团队中,成…

2024“华为杯”数模研赛E数据提取代码

2024年数学建模研究生赛E题从视频中提取数据的代码。主要包括三个部分:车流量计算、各车道车流量计算和平均速度计算。主要讲述了代码的使用方法,包括需要修改的参数和文件路径,以及一些特殊情况的处理方法。同时还提供了参数估计和绘图的相关代码,以及如何根据不同视频视角…

用Eide下配合Cubemx配置stm32环境

PS:本篇为个人学习的记录,一是方便回忆,二是相同时方便给像我一样的小白一点建议。本文默认已安装好STM32Cubemx和VSCode,以及VsCode下的Eide Cubemx部分选择好需要使用的对应单片机创建工程。在Project Manager选项下 选择Toolchain/IDE下的makefile方式来创建工程。什么是…

USB2.0设备的休眠挂起及远程唤醒

USB可见设备状态,分为连接(Attached),上电(Powered),默认(Default),地址(Address),配置(Configured)和挂起(Suspended)6个状态。所谓可见,即USB系统和主机可见的状态,其他状态属于USB设备内部而不可见。其中有关电源的,大致可分下面三类:连接状态(Attached):设备连…

CSP-S 2024 提高组初赛解析(更新至单项选择)

单项选择 1在 Linux 系统中,如果你想显示当前工作目录的路径,应该使用哪个命令? A pwd B cd C ls D echopwd : print working directory cd : 跳转到指定目录 ls : 列出当前目录的所有子文件和子文件夹 echo : 输出指定内容 2假设一个长度为n的整数数组中每个元索值互不相同…