shell脚本编写知识2
二
数值运算工具:
整数运算工具expr a + b ( + - * / % 加 减 乘 除取商 除取余)
$[1+1]其中直接写就可以 或$(())
x=1 y=2
echo $[x+y] #( 变量直接写进其中就可以)
let 运算之后不回显结果let( i++ i=i+1 i-- i=i-1
i+=3 i=i+3
i-- i=i-1 i=2 i=i2
i/=2 i=i/2 )
x=2
let x=x+8
echo $x
小数运算:bc进入到计算机(除的时候要控制小数点的位数scale)
echo “scale=2;2.2+3;3.3+3” | bc .20
非交互式的多个计算用;隔开以“”引起来
逻辑判断:echo “1>2” | bc (0)
echo “4>2” | bc (1)
echo “4==4” | bc (1)
判断:
echo $RANDOM(输出的为随机数)
[ 判断表达式 ] (注意空格) test 判断表达式
字符判断:
是否相等?[ ‘a’ == ‘a’ ]判断a是否等于a; (查看echo $?)
是否不等于?[ ‘a’ != ‘b’ ]判断a是否不等于b (查看echo $?)
判断变量的值是否为空?[ -z $abc ]判断abc的值是否为空 ...
判断变量的值是否不为空[ !-z $abc ]判断abc是否不为空 ...
****在linux中一行如何打多条命令
A;B 执行A,执行B
A&&B 执行A,仅当A成功才执行B (且)
A||B 执行A,仅当A失败才执行B (或)
数字判断:
-eq 等于 equal
-ne 不等于 not equal
-gt 大于 greate than
-ge 大于等于
-lt 小于 less than
-le 小于等于
例:
1.每分钟检测放前计算机登陆 用户的数量如果大于2,则发送邮件报警
crontab -e
/1.sh
2.vim /1.sh
#!/bin/bash
Num=who | wc -l
[ $num -gt 2 ] && mail -s www root < a.txt
3.mkdir /a.txt
echo 后院失火 | /a.txt
文件或目录判断:
-e判断是否存在 exist
-f判断存在,且为文件file
-d判断存在,且为目录dir
-r判断是否可读read
-w判断是否可写write
-x判断是否可执行excute
if判断:
ping -i(指定两次之间的间隔时间)-W(指定等待时间)-c(指定次数)
单分支if(仅判断对)
if [ 判断 ];then
命令
fi
双分支if判断
if [ 判断 ];then
命令
else
失败
fi
大于等于90 神功绝世
大于等于80,小于90 登峰造极
大于等于70,小于80 炉火纯青
大于等于60,小于70 略有小成
小于60 初学乍练
例1:(运行脚本测试ip地址师傅可以ping通)
#!/bin/bash
read -p "请输入IP地址:" ip
ping -i0.1 -W1 -c4 $ip &> /dev/null
if [ $? -eq 0 ];then
echo "该IP地址通"
else
echo "该IP地址不通"
fi
~
例2:(运行脚本检查80端口是否开启在运行)
#!/bin/bash
netstat -anput | grep :80 &>/dev/null
if [ $? -eq 0 ];then
echo 80端口已经启动
else
echo 80端口没有启动
fi
例3:(运行脚本检查httpd的软件包是否安装)
rpm -qa |grep httpd &>/dev/null
if [ $? -eq 0 ];then
echo "该软件包已经安装"
else
echo "该软件包没有安装"
fi
例4:(运行脚本运用if判断不同分值范围的而实现输出修炼结果的不通)
#!/bin/bash
echo " 人界修炼等级榜
(此法宝为消耗品只可以使用100) "
for i in {1..100}
do
read -p "
请输入道要查阅的道号:" name
read -p " 请输入测试石显示的整数测试积分:" jf
if [ $jf -gt 100 ];then
echo "
$name:人界系统权限不足无法查看详细等阶请查看仙界等阶榜"
elif [ $jf -ge 100 ];then
echo "
$name:的目前修炼等阶为大乘期"
elif [ $jf -ge 90 ];then
echo "
$name:的目前修炼等阶为元婴期"
elif [ $jf -ge 80 ];then
echo "
$name:的目前修炼等阶为金丹期"
elif [ $jf -ge 70 ];then
echo "
$name:的目前修炼等阶为筑基期 "
elif [ $jf -ge 60 ];then
echo "
$name:刚刚步入修炼为炼气期 "
elif [ $jf -gt 0 ];then
echo "
$name:为一凡人尚未开始修炼 "
else
echo "
$name:人界等阶榜查无此人请查看冥界等阶榜"
fi
done
shell循环介绍:
for循环:
for 变量名 in 值列表
do
命令序列
done
seq使用:
echo {不能使用变量} seq $X (后面可以使用变量)
echo {5..10} == seq 5 10(输出为5到10)
seq 5 (输出为1到5)
例:实现自动检查172.40.51.100到172.40.51.200之间能否ping通
#!/bin/bash
a=0
b=0
for i in seq 100 200
do
ping -c1 -i0.1 -W1 172.40.51.$i &>/dev/null
if [ $? -eq 0 ];then
echo “172.40.51.$i is up”
let a++
else
echo “172.40.51.$i is down”
let b++
fi
done
echo "开机的有$a 个,关机的有$b 个"
~
2.计算1+2+3+4。。。+100的和(expr echo | bc let <let 在计算变量是不显示出来的>)
#!/bin/bash
x=0
for i in {1..100}
do
let x+=i
done
echo $x
~
3.将/var/log每个文件,单独打包,保存到/tmp
#!/bin/bash
#x=find /var/log -type f
for i in ls /var/log
do
tar -zcf /tmp/$i.tar.gz $i
done
while循环:
while [ 条件测试]
do
命令序列
done
例: i=1
while [ $i -lt 10 ]
do
echo “nihao”
let i++
done
死循环
while :
do
命令序列
done
case判断语句:(简化的if,每一个语句的结束都以;;结束《 )中写匹配条件》 )
case $1 in
redhat)
echo “fedora”;;
fedora)
echo “redhat”;;
*)
echo “Usage”
Esac
case "$1" in
-n)
touch "$2" ;;
-e)
vim "$2" ;;
-c)
cat "$2" ;;
-r)
rm -rf "$2" ;;
*)
echo "Usage :$0 (-n|-e|-c|-r)文件名"
esac
Shell脚本的函数:
(给一堆代码取个别名)
定义函数
函数名(){
命令
}
调用函数:函数名
<直接在命令行书写就可以>
例:
mymkdir(){
mkdir /a
mkdir /b
}
执行:mymkdir(在根下创建目录为a和b)
只是当时有效,放在/etc/profile下是永久有效
mymkdir(){
mkdir /$1
}
执行:mymkdir aaa(创建一个目录在根下为aaa)
echo -e “\033[ 32mOK\033[0m”
(extend扩展echo的功能,扩展一个颜色,为32的颜色,改变的我OK的颜色,改回0的颜色<0没有颜色> 同时指定用分号隔开<例:~[ 32;44mOK\033[0m>)
3x 是字体颜色4X为背景颜色x为样式
cecho(){
echo -e "\033["$1"m"$2"\033[0m"
}
cecho 32 OK
cecho 33 Error
cecho 34 Warning
echo -n(不另起一行)
中断与退出:
Break(中断整个循环体)continue(中断本次循环进入下一次循环)exit(中断整个脚本)
可以给for和while
例:
for i in {1..5}
do
[ $i -eq 3 ] && break
echo $i
done
echo OK
(输出的为1 2 OK)
for i in {1..5}
do
[ $i -eq 3 ] && continue
echo $i
done
echo OK
(输出的为1 2 4 5 OK)
for i in {1..5}
do
[ $i -eq 3 ] && exit
echo $i
done
echo OK
(输出的为1 2 )
for i in {1..254}
do
[ $i -eq 3 ] && continue
ssh 192.168.4.$i “poweroff”
done
#如本机的ip为192.168.4.3
#!/bin/bash
b=0
while :
read -p "请输入一个整数:" a
do
[ -z $a ] && break
let b=b+$a
done
echo 此次计算的总和为"$b"
shell脚本编写知识2相关推荐
- Linux编写脚本nsum求和,详解Linux Shell脚本编写技巧,附实例说明
原标题:详解Linux Shell脚本编写技巧,附实例说明 Linux Shell是一个很难的知识板块.虽然大家都认真学,基本的语法很都掌握,但有需求时,很难直接上手编程,要么写了很久,要么写不好!对 ...
- 什么是Shell?Shell脚本基础知识详细介绍
这篇文章主要介绍了什么是Shell?Shell脚本基础知识介绍,本文是一篇Shell脚本入门文章,在本文你可学到什么是Shell.有多少种Shell.一个Shell脚本代码实例,需要的朋友可以参考下 ...
- shell 脚本编写 if else then
shell 脚本编写 if else then if ....; then .... elif ....; then .... else .... fi 大多数情况下,可以使用测试命令来对条件进行测试 ...
- Shell awk文本处理,shell脚本编写
Shell awk文本处理,shell脚本编写 一:内容包含awk.变量.运算符.if多分支 <a>语法糖: awk [options] 'commands' files option - ...
- 7. Shell 脚本编写
7. Shell 脚本编写 1.提示用户输入一个字符串,如果是 hello,打出 yes,并每秒输出 "hello,world",否则就输出 no,实现如下: #!/bin/bas ...
- shell脚本编写遇到的问题--循环
shell脚本编写遇到的问题 0 背景 工作中需要修补数据,大概半年的数据;跑数据是scala脚本+python脚本,如果手动补充数据,需要运行180次- 于是,shell脚本搞起来- 1 规划思路 ...
- datetime报错 sql脚本_Linux中Mysql数据库备份shell脚本编写实例
学了段时间的Linux,也学习了shell脚本编写的基本命令与语法,现做一个综合案例来详细讲解. 要求:1).每天凌晨备份数据库shaoxiao到/data/backup/db中 2).备份开始和备份 ...
- Linux系统一键安全加固shell脚本编写思路
本次分享一下个人在对Linux系统一键安全加固shell脚本编写时的一些思路: Linux系统一键安全加固shell脚本编写思路 1.编写须知 1.1 脚本使用说明 1.2 主要功能说明: 1.3隐藏 ...
- linux脚本设计菜单,菜单式shell脚本编写
用shell脚本编写有以下的功能: Syste Manage 1.show the user //显示登陆系统用户以及动作. 2.test the network //网络测试 3.show the ...
最新文章
- CSDN 字体颜色表
- JSON字符串通过response下载保存
- c语言控制数码管显示时间,数码管显示时间整点报时C语言实例
- layui表单的ajax联动,layui的select联动实现代码
- html柳树动画,3D教程-柳树生长动画
- java基础工具VisualVM介绍与详细使用
- mysql记录当前表数据的数据条数据类型_MySQL学习记录:数据类型与操作数据表...
- 在有网络还是比较好解决软件上的问题
- aforge java_基于Aforge摄像头调用简单实例
- 【visio】visio绘制流程图教程
- 高位十字星收盘什么意思?高位十字星缩量是什么?
- [bzoj4556][TJOIHEOI2016]字符串
- 100base-fx 单模/多模接口是什么意思
- [基础]tfcenter的安装和启动
- android EditText 属性
- 南邮-NCTF2022 WRITE UP
- python接收http请求_python通过get,post方式发送http请求和接收http响应
- Romi Robot Kit (for FIRST) 快速入门指南
- Linux常用命令(4)-磁盘管理
- DBMS 数据库管理系统的三级模式架构《ClickHouse 实战:企业级大数据分析引擎》...