​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

相关推荐

  • IO模型——进程工作的方式

    I/O模型 模型:阻塞型、非阻塞型、复用型、信号驱动型、异步 同步/异步: 关注消息通知机制      消息通知:          同步:等待对方返回消息       &nbsp…

    Linux干货 2016-10-25
  • shell脚本基础

    shell脚本基础 基本介绍 Shell脚本与Windows/Dos下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比Windows下的批处理更强大,比用其他编程程序编辑的程序效率更高。换一种说法也就是,shell script是利用shell的功能所写的一个程序,这个程序是使用…

    2017-07-01
  • 磁盘分区

    磁盘分区 一、分区方式两种 MBR分区不能超过2个T按柱面分区主引导记录存放在,0磁道0扇区 512bytes前446字节存放bootloader (软件程序)64字节:分区表16个字节表示一个有效的分区 故只能分4个主分区。大于4个需要创建扩展分区,并在其中创建逻辑分区。2字节 55AABPT分区GPT:GUID(Globals Unique Identi…

    Linux干货 2016-08-29
  • Linux任务计划,周期性任务执行详解

    Linux任务计划,周期性任务执行 概述 本章将为大家介绍一些任务计划和周期性任务计划执行相关内容任务计划的分类主要有由两种    未来的某时间点执行一次某任务:at,batch    周期性运行某任务:crontab具体分为三个方面来说明:    1、at计划任务    2、c…

    Linux干货 2016-09-27
  • Mozart的剑(文本处理工具)——壹剑(文本查看cat、more、less)

    壹剑(文本查看cat、more、less) 博客之前突然想起两句话,很有意思的话,在此贴出上句,希望可以与大家分享,不可问度娘,有兴趣的可以试试。 上句:烟锁池塘柳    下句: 上句:因荷而得藕    下句: 1>cat命令是Linux系统下的一个文本输出命令,一般是用于观看某个文件的内容,特点:一次性显示整个…

    2017-07-29
  • NFS服务器设置

    一、NFS的相关概念     NFS(Network File System)即网络文件系统的缩写,由Sun公司研发,其目的是为了解决网络文件共享的问题。用户可以实现像挂载本地文件系统一样挂载NFS服务器的共享目录;其具有配置简单、使用高效的特点,但只能在Linux系统使用,不能跨平台使用。 &nb…

    Linux干货 2015-06-25