Linux shell 脚本(二)
转载请标明出处:
http://blog.csdn.net/zwto1/article/details/45078837;
本文出自:【明月的博客】
五、字符串处理
1.子串截取操作:
路径分割:
dirname命令:定位目标所在文件夹的位置
basename命令:目标对象的名字,通常指的指的是文件名或者最底层的目录名
使用expr命令
格式:expr substr $Var1 起始位置 截取长度
使用${}表达式
格式:${Var1:起始位置:截取长度}
例子:
1.
Var="/etc/httpd/conf/httpd.conf"
dirname $Var
etc/httpd/conf
basename $Var
httpd.conf
2.
Var=hsdzwmoon
expr substr $Var 4 6 #编号从1开始
zwmoon
3.
Var=hsdzwmoon
echo ${Var:4:6} #编号从0开始
wmoon
echo ${var::5} #从开头开始截取 可以省略起始位置的书写
hsdzw
2.字符串替换
使用${}表达式
格式1:${var/old/new} #将变量里第一个old替换成new
格式2:${var//old/new} #将变量里所有old替换成new
例子:
1.
Var=hsdzwmoon
echo ${Var/o/l}
hsdzwmlon
echo ${var//o/l}
hsdzwmlln
3.使用随机字符串
如何获取随机字符串?
linux 里没有可以获取随机字符串的变量
可以通过如下方式获得:
/dev/urandom #设备文件,随机字符 乱码的
|
/usr/bin/md5sum #校验和 生成ASCII码
|
/bin/cut #格式处理,截取我们需要保留的部分
随机字符->ASCII 字符
head -1 /dev/urandom |md5sum #head -1 第一行随机字符
使用cut切割字符串
echo $var |cut -b 起始位置-结束位置 #位置为首、尾时可省略
例子:
1.
如下图:
六、条件测试
1.测试操作规范:
测试的本质:
是一条操作命令,根据$?返回值来判断条件是否成立
操作规范:
格式1:test 条件表达式
格式2:[条件表达式]
测试操作的练习方法:
直接跟&&echo YES 判断结果
用法:[条件表达式] && echo YES
例子:
1.如下图:
2.文件状态的检测:
2.1 存在及识别:
-e:目标是否存在
-d:是否为目录
-f:是否为文件
例子:
1.如下图:
2.2 权限的检测:
-r:是否有读取权限
-w:是否有写入权限
-x:是否有可执行权限
例子:
1.如下图:
[ -x "/etc/shadow" ] && echo YES [ -r "/etc/shadow" ] && echo YES YES
特殊情况:
root 用户下:
ls -l /etc/shadow -r-------- 1 root root 1386 04-16 18:58 /etc/shdow [ -w "/etc/shadow" ] && echo YES #root下我们可以看到没有写权限,但是输出为YES,这里要注意:所有者W例外 YES
3.整数值比较、子串匹配
整数值比较:
-eq:等于
-ne:不等于
-gt:大于
-lt:小于
-ge:大于或等于
-le:小于或等于
例子:
who | wc -l #统计登陆用户数
4.字符串匹配:
=:两个字符串相同
!=:两个字符串不相同
例子:
1.如下图:
七、使用if判断结构
程序流控制:
执行过程的顺序化、自动化
希望脚本智能化的选择与处理
让重复操作更聪明一些
对于...多个对象...如何逐个来处理? for
在...取值是...的情况下怎么办? case
如果...条件是...时程序需要做什么? if
1.单分支if语句结构
if 条件测试
then 命令序列 #只关注条件成立的情况
fi
例子:
单分支if应用示例: 检查备份目录/opt/mrepo,若不存在则创建 cat chkdir.sh #!/bin/bash BACKUP_DIR="/opt/mrepo" if [ ! -d $BACKUP_DIR ] then mkdir -p $BACKUP_DIR fi
2.双分支if语句结构
if 条件测试
then 命令序列1
else 命令序列2
fi
例子:
双分支if应用示例: 判断目标主机是否存活,显示检测结果 cat chkhost.sh #!/bin/bash ping -c 3 -i 0.2 -W 3 $1 &>/dev/null if[ $? -eq 0 ] then echo "Host $1 is up." else echo ”Host $1 is down“ fi ./chkhost.sh 192.168.4.11 Host 192.168.4.11 is up ./chkhost.sh 192.168.4.13 Host 192.168.4.13 is down
3.多分支if语句结构
if 条件测试1
then 命令序列1
elif 条件测试2
then 命令序列2
else
命令序列n
fi
例子:
多分支if应用示例: 判断机试分数,区分优秀/合格/不合格 cat gradediv.sh #!/bin/bash read -p "请输入你的分数(0-100):" GRADE if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ];then echo "$GRADE 分!优秀" elif [ $GRADE -ge 70 ]&&[ $GRADE -le 84 ];then echo "$GRADE分,合格" else echo "$GRADE 分?不合格" fi
结果如下图:
八、使用for循环
for 变量名 in 取值列表
do
命令序列
done
for IP地址 in 主机地址列表
do
检查状态
done
例子:
1.依次输出 1st. 2nd. 3rd.
#!/bin/bash for i in "1st." "2nd." "3rd." do echo $i done
结果如下图:
2.逐词输出/etc/host.conf 文件内容
#!/bin/bash for i in $(cat /etc/host.conf) do echo $i done
结果如下图:
实战案例:
1.目标:批量加用户账号:
用户列表文件users.txt ,每行一个
将初始口令设为123456,首次登陆后必须更改
cat uad.sh #!/bin/bash for i in $(cat /root/users.txt) do useradd $i echo "123456" | passwd --stdin $i chage -d 0 $i done
结果如下图:
2.检测一个IP范围的主机状态:
192.168.4.1 -192.168.10
根据是否ping通来判断
cat chkping.sh
#!/bin/bash
IP_PRE="192.168.4."
for IP in $(seq 1 5)
do
ping -c 3 -i 0.2 -W 3 ${IP_PRE}$IP &>/dev/null
if[ $? -eq 0 ];then
echo "${IP_PRE}$IP is up."
else
echo ”${IP_PRE}$IP is down“
fi
done
./chkping.sh
192.168.4.1 is down
192.168.4.2 is up
192.168.4.3 is down
192.168.4.4 is down
......
Linux shell 脚本(二)的更多相关文章
- Linux shell脚本编程(二)
Linux shell脚本编程(二) 练习:求100以内所有偶数之和; 使用至少三种方法实现; 示例1: #!/bin/bash # declare -i sum=0 #声明一个变量求和,初始值为0 ...
- 老李分享:《Linux Shell脚本攻略》 要点(二)
老李分享:<Linux Shell脚本攻略> 要点(二) poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课 ...
- 读《Linux Shell脚本攻略》(第2版) 一遍、二遍体会
前段时间读完了<Linux Shell脚本攻略>(第2版)这本书,给部分想读这本书的人分享下个人感受. 第一遍体会解读:就像黑夜中的灯塔,指明前进的道路. 推荐指数:强烈推荐. 书中讲解的 ...
- Linux shell脚本基础学习详细介绍(完整版)二
详细介绍Linux shell脚本基础学习(五) Linux shell脚本基础前面我们在介绍Linux shell脚本的控制流程时,还有一部分内容没讲就是有关here document的内容这里继续 ...
- 阿里Linux Shell脚本面试25个经典问答
转载: 阿里Linux Shell脚本面试25个经典问答 Q:1 Shell脚本是什么.它是必需的吗? 答:一个Shell脚本是一个文本文件,包含一个或多个命令.作为系统管理员,我们经常需要使用多个命 ...
- Linux Shell脚本教程
v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...
- 老李分享:《Linux Shell脚本攻略》 要点(四)
老李分享:<Linux Shell脚本攻略> 要点(四) 1.IP地址的正则表达式: [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} 2. ...
- 老李分享:《Linux Shell脚本攻略》 要点(三)
老李分享:<Linux Shell脚本攻略> 要点(三) 1.生产任意大小的文件 [root@localhost dd_test]#[root@localhost dd_test]# ...
- 读《Linux Shell脚本攻略》(第2版) 总结
前段时间读完了<Linux Shell脚本攻略>(第2版)这本书,给部分想读这本书的人分享下个人感受. 说下这本书的难度吧.纯新手或者只懂少部分编程知识的人,读起来还是有很大难度的.以我为 ...
- linux ——shell 脚本
linux—shell 脚本 精简基础 2018/10/30 13 ...
随机推荐
- slf4j-logback 日志以json格式导入ELK
同事整理的,在此分享.logback,log4j2 等slf4j的日志实现都可以以json格式输出日志, 这里采用的是logback.当然也可以以文本行的格式输出,然后在logstash里通过grok ...
- Java集合框架(四)—— Queue、LinkedList、PriorityQueue
Queue接口 Queue用于模拟了队列这种数据结构,队列通常是指“先进先出”(FIFO)的容器.队列的头部保存在队列中时间最长的元素,队列的尾部保存在队列中时间最短的元素.新元素插入(offer)到 ...
- aforge 学习-基本图像处理要用的类库
1.图像灰度化:Grayscale.CommonAlgorithms.BT709(3种) FiltersSequence =new FiltersSequence(数组处理函数): 2.二值化(阈值 ...
- 重装Win10系统的非常简单的操作教程
这是回到学校的第二天,准备搞一份实习证明,然而宿舍宽带停了,于是我来到了社团办公室,打开了其中一台电脑. 各位师弟师妹...你们也太厉害,把电脑折腾成这样...电脑装了各种各样的工具, Adobe P ...
- linux查看端口被占用等常用命令
一 根据端口号 查找对应的服务 比如我们查查找端口号8189对应的服务是哪个 1 先根据端口号查找对应对的pid(进程id)为23367 netstat -anp | grep 8189 ...
- 转:彻底搞清referrer和origin
在http协议中有这两个字段,之前一直隐隐约约的觉得是,一种标记请求来源的方法(的确是),但是更细致的对这两个字段的比较却没有一个清楚的认识. referrer 到底是referer还是referre ...
- Unity引擎与C#脚本简介
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 由 QQ会员技术团队 发布在云+社区 1. Unity编辑器基础 从原理上讲,游戏开发就是将一系列变动的场景呈现在玩家面前,并根据玩家的输入 ...
- RISC_CPU
采用Top-Down设计方法,深入理解CPU的运作原理,本文参照夏宇闻老师的<Verilog 数字系统设计教程>,并做了相应的修改.仿真工具采用Mentor公司的ModelSim. 1.C ...
- Android shape使用详解
在android开发过程中,shape是比较常用的,用于设定控件的形状,可以在selector,layout等里面使用,有6个子标签,各属性说明如下: <?xml version="1 ...
- dm642的中断定时器
TIMER_Handle TimerHandle0; void timer1() { ////////////定时器/////////////////////// TimerHandle0 = TI ...