​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
下一篇 2016-09-25

相关推荐

  • 定制SecureCRT配色

    定制SecureCRT配色 SecureCRT默认的配色方案不怎么喜欢,结合网上其他人的总结+自己的探索,总结怎样定制自己的配色。配出自己喜欢的界面,还是会很有成就感的。 使用SecureCRT自带主题 效果图 图中个文件的类型: compress.tar.gz 压缩文件 directory 目录 file.txt 普通文件&n…

    Linux干货 2017-09-03
  • RAID概述

    1、引言 RAID全称Redundant Arrays of Inexpensive Disks / Redundant Arrays of Independent Disks,即独立冗余磁盘阵列。RAID可以通过相关技术(软件/硬件),将多个较小的磁盘整合成为一个较大的磁盘整体,而且能从某些方面提高数据的读写及数据保护。RAID分为不同…

    Linux干货 2016-12-24
  • mkdir用法实践

    mkdir:make directories mkdir [OPTION]… DIRECTORY… -p: 自动按需创建父目录; -v: verbose,显示详细过程; -m MODE:直接给定权限;   1、创建/tmp目录下的:a_c,a_d, b_c, b_d ~]# mkdir -v /tmp/{a,b}_{c,d}…

    Linux干货 2016-11-06
  • Linux软件包安装—-卷一软件包管理rpm方式安装程序

    rpm方式手动安装程序,可能需要”人工智能”的方式手动去处理程序依赖问题

    Linux干货 2017-12-02
  • Linux之账号管理

    Linux之账号管理 一、新增与删除用户:useradd,相关配置文件,passwd,usermod,userdel 在Linux登录系统时会输入账号和密码,所以创建用户也需要这两个数据。新建用户用useradd命令,密码的给予则用passwd命令。 useradd 1.添加新用户 -u: -u  uid username 创建用户时指定uid(如…

    2017-07-23
  • 用keepalived高可用LVS-dr模型

    环境四个虚拟机 Real server:node1:172.16.100.6         CeotOS 6 Real server:node3:172.16.100.69         CeotOS 7 Director1:172.16.100.67                        CeotOS 7 Director1:172.16.10…

    Linux干货 2017-10-15