转载请标明出处: 

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 脚本(二)的更多相关文章

  1. Linux shell脚本编程(二)

    Linux shell脚本编程(二) 练习:求100以内所有偶数之和; 使用至少三种方法实现; 示例1: #!/bin/bash # declare -i sum=0 #声明一个变量求和,初始值为0 ...

  2. 老李分享:《Linux Shell脚本攻略》 要点(二)

    老李分享:<Linux Shell脚本攻略> 要点(二)   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课 ...

  3. 读《Linux Shell脚本攻略》(第2版) 一遍、二遍体会

    前段时间读完了<Linux Shell脚本攻略>(第2版)这本书,给部分想读这本书的人分享下个人感受. 第一遍体会解读:就像黑夜中的灯塔,指明前进的道路. 推荐指数:强烈推荐. 书中讲解的 ...

  4. Linux shell脚本基础学习详细介绍(完整版)二

    详细介绍Linux shell脚本基础学习(五) Linux shell脚本基础前面我们在介绍Linux shell脚本的控制流程时,还有一部分内容没讲就是有关here document的内容这里继续 ...

  5. 阿里Linux Shell脚本面试25个经典问答

    转载: 阿里Linux Shell脚本面试25个经典问答 Q:1 Shell脚本是什么.它是必需的吗? 答:一个Shell脚本是一个文本文件,包含一个或多个命令.作为系统管理员,我们经常需要使用多个命 ...

  6. Linux Shell脚本教程

    v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...

  7. 老李分享:《Linux Shell脚本攻略》 要点(四)

    老李分享:<Linux Shell脚本攻略> 要点(四)   1.IP地址的正则表达式: [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} 2. ...

  8. 老李分享:《Linux Shell脚本攻略》 要点(三)

    老李分享:<Linux Shell脚本攻略> 要点(三)   1.生产任意大小的文件 [root@localhost dd_test]#[root@localhost dd_test]# ...

  9. 读《Linux Shell脚本攻略》(第2版) 总结

    前段时间读完了<Linux Shell脚本攻略>(第2版)这本书,给部分想读这本书的人分享下个人感受. 说下这本书的难度吧.纯新手或者只懂少部分编程知识的人,读起来还是有很大难度的.以我为 ...

  10. linux ——shell 脚本

                                                      linux—shell 脚本  精简基础                 2018/10/30 13 ...

随机推荐

  1. 拦截窗体关闭、最大、最小事件 - Winform

    RT,不赘述,代码以下: const int WM_SYSCOMMAND = 0x112; const int SC_CLOSE = 0xF060; const int SC_MINIMIZE = 0 ...

  2. Spring中的@scope注解

    默认是单例模式,即scope="singleton".另外scope还有prototype.request.session.global session作用域.scope=&quo ...

  3. java5 - 数组与排序算法

    数组是什么? 一.一维数组 1 声明与定义的区别 一般的情况下我们常常这样叙述, 把建立空间的声明称之为"定义", 而把不需要建立存储空间称之为"声明". 很明 ...

  4. DxPackNet 3.音频捕捉(录音)

    用DxpackNet捕捉音频其实很简单 1.初始化控件 IDxMicrophCapture microphone; private void Form1_Load(object sender, Eve ...

  5. nyoj720 项目安排 二分+dp

    思路:dp(i)表示前i个项目的最大收益,转移方程很好写dp(i) = max{ dp(k) + val(i) },val(i)表示第i个项目的价值,dp(k)表示前k个的最佳收益,k满足ed(k) ...

  6. 【BZOJ2959】长跑 (LCT+并查集)

    Time Limit: 1000 ms   Memory Limit: 256 MB Description 某校开展了同学们喜闻乐见的阳光长跑活动.为了能“为祖国健康工作五十年”,同学们纷纷离开寝室 ...

  7. 吾八哥学Selenium(四):操作下拉框select标签的方法

    我们在做web页面自动化测试的时候会经常遇到<select></select>标签的下拉框,那么在Python里如何实现去操作这种控件呢?今天就给大家分享一下这个玩法.为了让大 ...

  8. 下载visual studio 的离线包

    我们知道,visual studio是微软发布的软件开发的集成平台,十分好用,可以说是目前最好用的软件编辑工具. 最新版的是visual studio 2017,但是在微软的官网上只支持下载在线安装器 ...

  9. Zookeeper笔记二-各种一致性协议解释

    我们知道Zookeeper的一致性是解决分布式事务的. 那么分布式事务代表的是强一致性. 强一致性解决的代表有以下协议(注意这几个协议跟zookeeper是没任何关系的,这是分布式的理论基础): 1. ...

  10. Hive数据倾斜总结

    倾斜的原因: 使map的输出数据更均匀的分布到reduce中去,是我们的最终目标.由于Hash算法的局限性,按key Hash会或多或少的造成数据倾斜.大量经验表明数据倾斜的原因是人为的建表疏忽或业务 ...