Linux shell 脚本(二)
来源:互联网 发布:linux 进程命令行参数 编辑:程序博客网 时间:2024/05/16 19:07
转载请标明出处:
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 $Varhttpd.conf 2.Var=hsdzwmoonexpr substr $Var 4 6 #编号从1开始zwmoon3.Var=hsdzwmoonecho ${Var:4:6} #编号从0开始wmoonecho ${var::5} #从开头开始截取 可以省略起始位置的书写hsdzw
2.字符串替换
使用${}表达式
格式1:${var/old/new} #将变量里第一个old替换成new
格式2:${var//old/new} #将变量里所有old替换成new
1.
Var=hsdzwmoonecho ${Var/o/l} hsdzwmlonecho ${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 YESYES
特殊情况:
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/bashBACKUP_DIR="/opt/mrepo"if [ ! -d $BACKUP_DIR ]then mkdir -p $BACKUP_DIRfi
2.双分支if语句结构
if 条件测试
then 命令序列1else 命令序列2
fi
例子:
双分支if应用示例: 判断目标主机是否存活,显示检测结果 cat chkhost.sh#!/bin/bash ping -c 3 -i 0.2 -W 3 $1 &>/dev/nullif[ $? -eq 0 ]then echo "Host $1 is up."else echo ”Host $1 is down“fi./chkhost.sh 192.168.4.11Host 192.168.4.11 is up./chkhost.sh 192.168.4.13Host 192.168.4.13 is down
3.多分支if语句结构
if 条件测试1
then 命令序列1
elif 条件测试2
then 命令序列2
else
命令序列n
fi
例子:
多分支if应用示例: 判断机试分数,区分优秀/合格/不合格 cat gradediv.sh#!/bin/bashread -p "请输入你的分数(0-100):" GRADEif [ $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
例子:
#!/bin/bashfor i in "1st." "2nd." "3rd."do echo $idone
结果如下图:
2.逐词输出/etc/host.conf 文件内容
#!/bin/bashfor i in $(cat /etc/host.conf)do echo $idone
结果如下图:
实战案例:
1.目标:批量加用户账号:
用户列表文件users.txt ,每行一个
将初始口令设为123456,首次登陆后必须更改
cat uad.sh #!/bin/bashfor 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/bashIP_PRE="192.168.4."for IP in $(seq 1 5)do ping -c 3 -i 0.2 -W 3 ${IP_PRE}$IP &>/dev/nullif[ $? -eq 0 ];then echo "${IP_PRE}$IP is up."else echo ”${IP_PRE}$IP is down“ fidone./chkping.sh192.168.4.1 is down192.168.4.2 is up 192.168.4.3 is down 192.168.4.4 is down ......
1 0
- Linux shell 脚本(二)
- 《Linux Shell脚本攻略》学习(二)
- Linux Shell脚本攻略(二)
- linux shell脚本攻略总结(二)
- 【Shell】【学习笔记】Linux Shell脚本应用(二)
- linux shell脚本案例二
- Linux Shell脚本基础(二)
- shell脚本(二)
- shell 脚本(二)
- Linux脚本(shell)编程(二) 基本语法
- Linux脚本(shell)编程(二) 基本语法
- 详细介绍Linux shell脚本基础学习(二)
- 详细介绍Linux shell脚本基础学习(二)
- 详细介绍Linux shell脚本基础学习(二)
- 详细介绍Linux shell脚本基础学习(二)
- Linux环境下的脚本—shell(二)
- linux学习之旅(二十五)& shell脚本基础
- linux shell(脚本)
- 中小型网站的缓存策略
- Netty 是什么?
- 黑马程序员:集合框架Map
- 解決在 Xcode 5.1环境下property所造成的 synthesis warning问题?
- activity无法自动旋转原因总结
- Linux shell 脚本(二)
- Coretext用法, 讲得很好。
- 《大数据量下,58同城mysql实践》
- gifsicle使用手册
- 今日感想
- GPIO介绍
- 2-22(被3整除且有5)
- UVa #821 Page Hopping , UVa #820 Internet Bandwidth (习题11-1,11-3)
- 黑马程序员:File对象的基本功能