​Bash2

字串比较时变量最好使用""

blob.png

这样就不会报错了,只是退出码不为0

组合条件:

    与:[ condition1 -a condition2 ]或condition1 && condition2

    或:[ condition1 -o condition2 ]或condition1 || condition2

     非:[ -not condition ]或者 ! condition

练习:如果当前主机的主机名为空,或为'localhost',将其修改为www.magedu.com

blob.png

练习:如果某用户存在,且answer变量的值为"yes",则显示用户的id号,否则,说用户选择了退出

if id $userName &> /dev/null && [ "$answer" == "yes" ];then

    …

fi

练习:给定一个用户,如果其shell为/bin/bash,且其id号大于等于500,则说明这是一个可登陆普通用户,否则,显示其为非登陆用户或管理员

blob.png

写脚本:

1、查看传递参数个数

2、判断参数类型等

3、逻辑等

练习:

如果某用户不存在,则添加之

blob.png

练习:

1、添加10个用户,如果用户不存在,则添加,如果存在就显示已经有此用户

2、显示一共添加了多少个用户

blob.png

练习:

1、添加10个用户,如果用户不存在,则添加并以绿色显示添加成功,如果存在就显示已经有此用户并以红色显示

2、显示一共添加了多少个用户

blob.png

blob.png

文件测试:

-a file:文件存在则为真

-e file:文件存在则为真

以上两者可能是文件、目录、链接

-f file:文件存在并且是普通文件则为真

-d file:存在并且为目录文件则为真

-h/L file:存在并且为符号链接则为真

-b file:存在并且为块设备则为真

-c file:存在并且为字符设备则为真

-S file:存在并且为套接字则为真

-p file:存在并且为管道则为真

-s file:存在并且为非空文件则为真

-r file:存在并且可读则为真

-w file:存在并且可写则为真

-x file:存在并且可执行则为真

-N file:存在并且mtime比atime新

file1 -nt file2:file1比file2新则为真

file1 -ot file2:file1比file2旧则为真

file1 -ef file2:file1比file2新则为真

练习:如果wget命令对应的可执行文件存在且可执行,则使用它下载http://172.16.0.1/centos6.5.repo至当前目录中

blob.png

练习:给定一个文件路径,判断此文件是否存在,不存在则说明文件不存在直接结束脚本;如果文件是一个普通文件,则显示为“regular file”,如果文件是目录,则显示为“directory”,如果文件是链接文件,则显示为“symbolic file”,否则显示为“unknown”

blob.png

blob.png

练习:脚本完成以下任务

1、分别复制/var/log下的文件至/tmp/logs目录

2、复制目录时,才使用cp -r

3、复制文件,使用cp

4、复制链接,使用cp -d

5、余下的类型,使用cp -a

写一个脚本,完成如下任务,其使用形式如下所示:

script.sh {start|stop|restart|status}

其中:

如果参数为空,则显示帮助信息,并退出脚本;

如果参数为start,则创建空文件/var/lock/subsys/script,并显示“starting script successfully.”

如果参数为stop,则删除文件/var/lock/subsys/script,并显示“Stop script successfully.”

如果参数为restart,则删除文件/var/locksubsys/script并重新创建,而后显示“Restarting script successfully.”

如果参数为status,那么:

如果文件/var/lock/subsys/script存在,则显示“Script is running…”,否则,则显示“Script is stopped.”

说明:script.sh是脚本文件名,在创建时,其名称可以自己随意定义,但如果其名称发生变量,上/var/lock/sussys/下的文件名也要随之而变;

交互编程:

read

    -p:"提示"

    -t:超时

blob.png

blob.png

例子:显示一个如下菜单给用户:

cpu) show cpu infomation

mem) show memory infomation

*) quit

1、如果用户选择了cpu,则显示/proc/cpuinfo文件的内容;

2、如果用户选择了mem,则显示/proc/meminfo文件的内容;

3、退出

blob.png

blob.png

或者

blob.png

blob.png

生成菜单第二种方法更易用

字符串中的模式匹配:

=~:模式匹配

用法:[[ "$var" =~ pattern ]]

blob.png

例如:让用户给定一个用户名,判断其是否拥有可登录shell;

blob.png

blob.png

blob.png

练习:写一个脚本,完成如下功能

使用格式:

script.sh  /path/to/somefile

1、可接受一个文件路径参数:

如果此文件不存在,则创建之,则自动为其生成前n行类似如下:

#!/bin/bash

# description:

# version:

# date:

# author: mageedu

# license: GPL

而后使用vim打开此文件,并让光标处在最后一行的行首

如果文件存在、且是bash脚本,则使用vim打开之,光标自动处行最后一行的行首;

否则,退出;

如果正常编辑保存,

判断,如果文件没有执行权限,则添加之;

判断,其是否有语法错误,如果有,提示;

while和until循环:

for循环劣势:

    1、先要在内存中生成列表,如果列表很大,就很占内存

    2、循环次数不定,无法适合这种场景

while适用于循环次数位置或不便用for直接生成较大的列表时

格式:

1、次数已知

while 测试条件;do

    循环体

done

如果测试条件为真,则进入循环;退出条件为,测试条件为假

declare -i count=1

while $count <= 100;do

    循环体

    let count++

done

until:

until 测试条件;do

    循环体

done

如果测试条件结果为假,则进入循环,退出条件为,测试条件为真

练习:求100以内所有正整数之和

blob.png

blob.png

练习:求100以内所有偶数之和,使用取模方式实现

blob.png

练习:提示用户输入一个用户名,如果用户存在,就显示用户的id号或shell,否则显示用户不存在,显示完成之后不退出,再次重复前面的操作,直到用户输入q或quit为止

blob.png

blob.png

2、

循环高级:

for的第二种使用格式:

for ((初始条件;测试条件;修改表达式));do

    循环体

done

练习:求100以内所有正整数之和

while的实现方式:

#!/bin/bash

declare -i count=1

declare -i sum=0

while [ $count -lt 100 ];do

    let sum+=$count

    let count++

done

echo $sum

for的实现方式:

#!/bin/bash

declare -i sum=0

for ((count=1;$count <= 100;count++));do

    let sum+=$count

done

echo $sum

变量在赋值时都不用加$,在比较时需要加

练习:求100以内所有偶数之和

#!/bin/bash

declare -i sum=0

for ((count=2;$count <= 100;count+=2));do

    let sum+=$count

done

echo $sum

while循环:遍历文本文件

格式:

while read i;do

    echo $i

done < file

练习:显示id号为偶数的用户的用户名、id、shell

blob.png

blob.png

练习:显示id号为偶数,且id号同gid的用户的用户名、id、shell

blob.png

blob.png

练习:显示当前系统上所有挂载的文件系统中空间使用百分比大于10的文件系统

bash编程至case

写一个脚本,使用格式:

1、start:创建/var/lock/subsys/script.sh

2、stop:删除此文件

3、restart:先删除文件,再创建文件

4、status:如果文件存在,显示running,否则显示stopped

blob.png

blob.png

blob.png

blob.png

case语句:有多个测试条件时,case语句会使得语法结构更明晰

case 变量引用 in

pattern1)

    分支1

    ;;

pattern2)

    分支2

    ;;

*)

    分支n

esac

pattern:类同于文件名通配机制,但支持使用|表示或者

a|b:a或b

*:匹配任意长度的任意字符

?:匹配任意单个字符

[]:指定范围内的任意单个字符

练习:用户键入字符后判断其所属的类别

blob.png

blob.png

练习:写一个脚本,对/etc/目录及内部的所有文件打包压缩

1、显示一个菜单,让用户选择使用的压缩工具

xz)xz compress tool

gz)gzip compress tool

bz2)bzip2 compress tool

2、根据用户选择的工具,对/etc/执行相应的操作并保存至/backups目录,文件形如/backups/etc-日期时间.tar.压缩后缀

blob.png

blob.png

blob.png

练习:写一个脚本,使用形式如下

showifinfo.sh [-i interface|-a] [-v]

要求:

1、-i或-a不可同时使用,-i用于指定特定网卡接口,-a用于指定所有接口

显示接口的ip地址

2、使用-v,则表示显示详细信息

显示接口的ip地址、子网掩码、广播地址

3、默认表示仅使用-a选项

blob.png

blob.png

blob.png

    

原创文章,作者:黑白子,如若转载,请注明出处:http://www.178linux.com/47622

(0)
黑白子黑白子
上一篇 2016-09-25 20:13
下一篇 2016-09-25 23:48

相关推荐

  • linux学习笔记: shell脚本编程相关(上)

    前言 unix/linux操作系统下的shell,是一种壳,其目的是提供一个用户与计算机相互交互的命令接口,通过输入各种命令,达到操作的目的。 与此同时,shell支持控制流程,进而可以组合出各种各样的应用实例。 shell脚本的格式  首行shebang机制:  bash脚本,首行添加#!/bin/bash&nbsp…

    Linux干货 2017-04-18
  • linux文件系统及文件操作

    1、Linux文件系统:    文件和目录被组织成一个单根倒置树结构,从根目录”/”开始。    文件系统分层结构LSB (Linux Standard Base)如下: 2、主要目录: /boot: 系统启动相关的文件,如内核、initrd,以及grub(bootloader) /etc:配置文件 /home:用户的…

    2017-07-23
  • 2016/10/14作业

    操作类: 1、设置自己的终端提示符,要求终端登陆时:     a> 需要带颜色      b> 需要显示当前执行到了第几条命令      c> 显示当前登录终端,主机名和当前时间 首先我们要了解一个环境…

    Linux干货 2016-10-19
  • LAMP编译安装

    所谓的LAMP是指构建在Linux之上经典的一种web架构方式,其中L指的是Linux,A指的是Apache的httpd,M指的是Mysql或MariaDB,P指的是PHP,这种组合方式的基本工作模式是有httpd负责接收和相应用户的请求,然后将需要处理的php页面交由后端的php应用程序处理,而php应用程序处理php页面时的数据存储在Mysql数据库中,…

    Linux干货 2016-12-19
  • 编译安装httpd-2.4.9及新特性详解

    前言 前面我们讲解了httpd在CentOS6上(httpd-2.2)的相关功能配置,而CentOS7上采用了httpd-2.4的版本,那么httpd-2.4增加了哪些特性呢?接下来让我们在CentOS6.6上手动编译安装一下httpd-2.4.9,看一下和httpd-2.2有什么不同,顺便补充说一下httpd的其它功能。 环境及新特性介绍 环境介绍 系统环…

    Linux干货 2015-04-15
  • corosync的高可用——高可用mariadb数据库

    corosync, pacemaker,nfs高可用mariadb 实验环境: 4台CentOS 7 的主机,并关闭的iptalbes和selinux功能 主机1:10.1.43.101 node1 corosync+pacemaker+amp 主机2:10.1.43.102 node2 corosync+pacemaker+amp 主机3:10.1.43.…

    Linux干货 2016-11-24