shell二之条件检测与数学运算
shell第二部分
- 一、数学运算符
- 1、expr
- 2、$(( )) 双括号计算
- 3、乘方的计算
- 4、" " | bc
- 5、let 累加累减
- 二、重定向与管道符号
- 1、重定向
- (1)< 从文件中读取
- (2) > 覆盖保存到文件 (正确时才会执行)
- (3)>> 追加。在文件尾部继续保存
- (4) 2> 和2>>
- (5)>& 混合输入
- (6)拓展 << 和 eof 的用法
- (7)tee命令的使用
- 2、管道符
- 三、位置变量介绍
- 四、预定义变量介绍
- 五、shell条件检测
- 1、条件检测
- 2、检测字符
- 3、整数值测试
- 4、文件类型测试
一、数学运算符
1、expr
expr 只支持整数的基本运算,不支持小数和乘方等运输,乘除*/号,还要加上转义符\
[root@localhost ~]# expr 5 + 2 //注意空格
7
[root@localhost ~]# expr 5 - 2
3
[root@localhost ~]# expr 5 \* 2
10
[root@localhost ~]# expr 5 \/ 5 //非整除时只取整数得数
1
[root@localhost ~]# expr 5 \/ 2 //非整除时只取整数得数
2
[root@localhost ~]# expr 5 % 5 //除,取余数
0
2、$(( )) 双括号计算
格式∶ $ ((表达式1,表达2))
特点:
1、在双括号结构中,所有表达式可以像c语言一样,如: a++,b–等。a++等价于a=a+1
2、在双括号结构中,所有变量可以不加入∶“$”符号前缀
3、双括号可以进行逻辑运算,四则运算
4、双括号结构扩展了for , while, if 条件测试运算
5、支持多个表达式运算,各个表达式之间用“,”分开
在数学是常echo 输出结果,只支持整数
[root@localhost ~]# echo $((2+5*2)) //可以不用加空格和转义符号
12
[root@localhost ~]# echo $((2%10))
2
[root@localhost ~]# echo $((2/10)) //取整数
0echo $(($RANDOM%3)) //随机并除以3取余数
3、乘方的计算
echo $((2**10))1024或者let a=2**10echo $a1024或者利用bc调用计算器,和echo结合输出结果echo "2^10" | bc
1024
4、" " | bc
“ " |bc调用计算器不仅可以算乘方,还能计算小数
echo "scale=3;8/5" | bc //计算小数时,scale规定小数的个数,注意分号隔开
1.600
5、let 累加累减
sum=0
for i in {1..100}
do
if [ $((i%2)) -eq 0 ] ;thenlet sum=$(($i+$sum))fidoneecho $sum
二、重定向与管道符号
1、重定向
(1)< 从文件中读取
mysql - uroot - p123456< xuegod. sq // 重定向导入数据库cat < 文件.text
(2) > 覆盖保存到文件 (正确时才会执行)
将显示在屏幕上的东西 覆盖保存到文件 (正确时才会执行)
echo ”123456 “ > 1.tex
cat 2.tex > 1.tex
(3)>> 追加。在文件尾部继续保存
echo "23456 " >> 1.tex //两个>之间没用空格
cat 2.tex >> 1.tex
echo "123456" >> passwd --stdin 用户名 //无交互改密码
(4) 2> 和2>>
将执行错误的信息覆盖保存或者追加保存到文件中(只在出现错误时执行)
[root@localhost ~]# wq
bash: wq: 未找到命令...[root@localhost ~]# wq 2> 1
[root@localhost ~]# cat 1
bash: wq: 未找到命令...
[root@localhost ~]# wq 2>> 1
[root@localhost ~]# cat 1
bash: wq: 未找到命令...
bash: wq: 未找到命令...
(5)>& 混合输入
正确和错误都保存
ll >> /dev/null //将结果丢入垃圾桶中
把/dev/null看作"黑洞”,所有写入它的内容都会永远丢失.而尝试从它那儿读取内容则什么也读不到。然而/dev/null对命令行和脚本都非常的有用;
还有的,/dev/zero在类UNIX操作系统中,/dev/zero是一个特殊的文件,当你读它的时候,它会提供无限的空字符(NULL.ASCI NUL,Ox00)。典型用法是用它来产生一个特定大小的空白文件。
dd if=/ dev / zero of=b.txt bs=1M count=50
(6)拓展 << 和 eof 的用法
eof, 也可自定义其他的的字符串,当交互内容再次出现相同的efo 则会停止输入(即起了起止符的作用),过程中的内容汇入文件中
cat > 1.text << eof //cat > >1.text << eof 内容则为追加形式存入
[root@localhost ~]# cat > 1.text << eof
> 1
> 2
> 5
> 6
> eof
[root@localhost ~]# cat 1.text
1
2
5
6
(7)tee命令的使用
即可以显示查看,又能输入到文件中保存(覆盖),-a 则追加
例1∶将磁盘使用的信息写入文件
df -h | tee disk.log
例2∶将文件系统使用的信息追加到文件
df -h | tee -a disk.log-
2、管道符
1、管道命令只处理前一个命令正确输出,不处理错误输出·
2、管道右边的命令,必须能够接收标准输入的数据流命令才行
·3、管道符可以把两条命令连起来,它可以链接多个命令使用
三、位置变量介绍
$0 当前边环境
$1 执行脚本时,后面第一个参数为$1
$2 执行脚本时,后面第二个参数为$2
…
四、预定义变量介绍
1、预定义变量是由Bash程序预先定义好的一类特殊变量,用户只能使用预定义变量,而不能创建新的预定义变量,也不能直接为预定义变量赋值。预定义变量使用“$”符号和另一个符号组合表示
$#:表示命令行中位置参数的个数。
$*:表示所有位置参数的内容,这些内容当做一个整体
$@:表示列出所有位置参数,但是是以单个的形式的列出
$?:表示前一条命令执行后的返回状态,返回值为0表示执行正确,返回任何非0值均表示执行出现异常。
$0:表示当前执行的脚本或程序的名称
$$:表示返回当前进程的进程号
$!:返回最后一个后台进程的进程号
五、shell条件检测
1、条件检测
(1)测试表达式是否成立,若成立返回0,否则返回其他数值 。通常用$?是否等于零
格式1: test 条件表达式
格式2:[条件表达式]
分类:
a、文件测试
b、整数测试
c、字符串测试
(2)&& 和||
a、在[ 条件判断 ] 后面,&& 前面条件为是时执行,|| 条件为否时才执行
b、在两个[ 条件判断 ] 中中间,表示且和或
[条件表达式1] $$ [条件表达式2] ,则表且的意思
[条件表达式1] $$ [条件表达式2] ,则表或的意思
c、[ 条件1 -a 条件2 ] 以及 [ 条件1 -o 条件2 ] 也能表示且和或
if [ $score -lt 0 -o $score -gt 100 ]; thenecho "超过范围无法判断"
2、检测字符
(1)检测字符串是否为空[ -z ] ,真时$? 为0
(2)检测字符串是否为非空[ -n ],真时$? 为0
3、整数值测试
-eq:第一个数等于(Equal)第二个数。
-ne:第一个数不等于(Not Equal)第二个数。
-gt:第一个数大于(Greater Than)第二个数。
-lt:第一个数小于(Lesser Than)第二个数。
-le:第一个数小于或等于(Lesser or Equal)第二个数。
-ge:第一个数大于或等于(Greater or Equal)第二个数
4、文件类型测试
d:测试是否为目录(Directory)
-e:测试目录或文件是否存在(Exist)
-f:测试是否为文件(File) 。
-L:测试是否为链接文件-
b:测试是否为设备文件
-c:测试是否为字符设备文件
-r:测试当前用户是否有权限读取(Read).
-w:测试当前用户是否有权限写入(Write)
-x:测试是否设置有可执行(Excute)权限-s:测试存在且文件大小为空
1、思考题:输入一个年份,判断是否是闰年(如果是就打印是闰年,否则打印不是闰年)
#!/bin/bash
read -p "请输入年份:" year
a=$(($year%4))
b=$(($year%400))
c=$(($year%100))
if [ $b -eq 0 ];thenecho "$year 年是闰年"
fiif [ $b -ne 0 ] && [ $c -eq 0 ];thenecho "$year 年不是闰年"
fiif [ $a -eq 0 ] && [ $c -ne 0 ];thenecho "$year 年是闰年"
fi2、#判断目标主机是否存活,存活就打印is up,如果不存活就打印is down
#
#!/bin/bash
read -p "请输入主机ip :" name
ping -c 5 $name $>/dev/null[ $? == 0 ] && echo "$name is up" || echo "$name is down"3、#判断输入的用户名是否存在,存在提示已存在,不存在则创建用户并设置密码
#!/bin/bash
read -p "请输入用户名:" name
id $name >& /dev/null
if [ $? -ne 0 ] ;thenuseradd $nameread -p "新用户名,输入密码:" mimaecho $mima > passwd --stdin $name
elseecho "用户已存在"
fi
~
4、#判断当前登陆用户是否是管理员
#!/bin/bash
user=$( whoami )
l=`id $user | grep root`
[ -n "$l" ] && echo "当前用户为管理者" || echo "当前为非管理用户"5、
#!/bin/bashuser=`whoami`
dname=`pwd`
zhuji=`hostname`
jincheng=` ps -aux |wc -l`
yonghu=` who |wc -l`
time=`date +%Y年%m月%d日-%H:%M:%S`
clearecho ---------------------------------------------------------------------
echo "# System Info Table # "
echo -e "\e[1;34m# 当前登录用户为: $user \e[3;60H#\e[0m"
echo -e "\e[1;31m# 当前登录目录为: $dname \e[4;60H#\e[0m"
echo -e "\e[1;33m# 当前登录主机为: $zhuji \e[5;60H#\e[0m"
echo -e "\e[1;32m# 当前登录系统时间为: $time \e[6;60H#\e[0m"
echo -e "\e[1;34m# 当前系统运行进程数为: $jincheng \e[7;60H#\e[0m"
echo -e "\e[1;33m# 当前系统登录的用户数: $yonghu \e[8;60H#\e[0m"
echo -e "\e[1;35m# #任何问题请联系: 139139139139 \e[9;60H#\e[0m"
echo ---------------------------------------------------------------------#当前登录目录为:
#当前登录主机为:
#当前登录系统时间为:
#当前系统运行的进程数:
#当前系统登录的用户数:
#任何问题请联系: 139139139139
shell二之条件检测与数学运算相关推荐
- Linux求平方脚本,Linux Shell脚本系列教程(五):数学运算
这篇文章主要介绍了Linux Shell脚本系列教程(五):数学运算,本文讲解了使用let.(())和[]进行算术运算.使用expr进行算术运算.使用bc进行算术运算三种方法,需要的朋友可以参考下 在 ...
- 大计基笔记(1)数学运算
目录 一.数据类型 二.python支持的数学运算符号表 三.代码 1.加法和减法 2.乘法和除法 3.向下取整除法与余数 4.指数运算 四.其他 1.数学符号<< >> 五. ...
- shell脚本编程笔记(二)—— 执行数学运算
数学运算在编程中也很重要,shell对它的支持并不算好,本文整理一下shell进行数学运算的途径,各种方法的缺点. 一. expr命令 shell最开始处理数学表达式的命令,可以在命令行做算术运算,参 ...
- linux+shell+整数计算器,Shell(())实现对整数进行数学运算
双小括号 (( )) 是 Bash Shell 中专门用来进行整数运算的命令,它的效率很高,写法灵活,是企业运维中常用的运算命令. 注意:(( )) 只能进行整数运算,不能对小数(浮点数)或者字符串进 ...
- shell脚本实战-使用shell进行数学运算
前言 上篇文章我们探讨了shell脚本的基础和变量, 在学习变量的时候我们探讨了环境变量和用户自定义变量,以及一些特殊的用法.无论使用哪种语言都少不了进行算术操作,今天我们来看看如何使用shell脚本 ...
- shell脚本基础(环境变量、重定向、数学运算、退出脚本)
一.使用环境变量 1.环境变量 所谓环境变量,就是用来存储有关shell会话和工作环境信息的特性,这项特性允许你在内存中存储数据,以便程序或shell中运行的脚本能够轻松访问到它们.这也是存储持久数据 ...
- smali to java_Smali —— 数学运算,条件判断,循环
通过上一篇 Smali 语法解析--Hello World 的学习,了解了 Smali 文件的基本格式.这一篇从最基本的数学运算,条件判断,循环等开始,更加详细的了解 Smali 语法. 数学运算 加 ...
- linux shell数学计算器,技术|使用 GNU bc 在 Linux Shell 中进行数学运算
在 shell 中使用 bc 更好地做算数,它是一种用于高级计算的数学语言. 大多数 POSIX 系统带有 GNU bc,这是一种任意精度的数字处理语言.它的语法类似于 C,但是它也支持交互式执行语句 ...
- Linux shell 变量 数学 运算
出处:http://qujunorz.blog.51cto.com/6378776/1382085 Abstract : 1) Linux shell 中使用 let , [ ] ,(( )) 三种 ...
最新文章
- Ubuntu 16.04 安装 PyInstaller
- mongodb之配置
- Vue.js使用-http请求
- delphi5开发人员指南_非设计人员的网页设计开发人员指南
- [转载]C#深拷贝的方法
- Android Sqlite3数据库操作
- DirectX组件之---DirectShow介绍
- php鲜花销售管理系统论文,鲜花销售系统论文
- python之turtle使用:画一颗美美哒的树
- java 创建manifest文件_jar Manifest例子如何将Manifest文件添加到jar文件中
- STM32F103C8T6基础开发教程(HAL库)—LED灯1S周期闪烁
- BERT |(3)BERT模型的使用--pytorch的代码解释
- 数据库理论——概念模型、逻辑模型、物理模型
- 深入理解设计模式-外观模式(门面模式)
- DSPE-PEG-GE11,磷脂-聚乙二醇-肿瘤细胞表皮生长因子肽GE11
- 【财富空间】卡耐基梅隆首席科学家大卫·伯恩:机器人学与商业机遇
- 字符串训练 ----- UVA 10815题目Andy's First Dictionary
- HC-05自动断开解决方法
- 高可用核心原理综述总结
- WMA、MP3音质对比