文件测试
存在性测试
-a FILE 这个选项的效果与-e 相同.但是它已经被弃用了,并且不鼓励使用
-e FILE
文件的存在性测试,存在则为真,否则为假

例:~]# [ -e /etc/rc.d/rc.sysinit ]
~]# echo $?
1

存在性及类型测试
-b FILE:是否存在并且为 块设备 文件
-c FILE:是否存在并且为 字符设备 文件
-d FILE:是否存在并且为 目录 文件
-f FILE:是否存在并且为 普通 文件
-h FILE 或 -L FILE:是否存在并且为 符号连接 文件
-p FILE:是否存在并且为 命名管道 文件
-S FILE:是否存在并且为 套接字 文件
文件权限测试:
-r FILE:是否存在并且对当前用户 可读
-w FILE:是否存在并且对当前用户 可写
-x FILE:是否存在并且对当前用户 可执行
特殊权限测试:
-u FILE:是否存在并且 拥有suid权限
-g FILE:是否存在并且 拥有sgid权限
-k FILE:是否存在并且 拥有sticky权限
文件是否有内容:
-s FILE:是否存在并且 有内容
时间戳:
-N FILE:文件自从上一次读操作后是否被修改过
从属关系测试:
-O FILE:当前用户是否为文件的属主
-G FILE:当前用户是否属于文件的属组
双目测试:
FILE1 -ef FILE2:FILE1与FILE2是否指向同一个文件系统的相同inode的硬链接
FILE1 -nt FILE2:FILE1是否新于FILE2
FILE1 -ot FILE2:FILE1是否旧于FILE2

组合测试条件:
逻辑运算:
第一种方式:
COMMAND1 && COMMAND2
COMMAND1 || COMMAND2
!COMMAND

当前用户是否是文件的属主,并且拥有可读权限:
[ -O FILE ] && [ -r FILE ]

第二种方式:
EXPRESSION1 -a EXPRESSION2
EXPRESSION1 -o EXPRESSION2
!EXPRESSION

当前用户是否是文件的属主,并且拥有可执行权限:
[ -O FILE -a -x FILE ]

练习:将当前主机名称保存至hostName变量中;主机名如果为空,或者为localhost.domain,则将其设置为www.magedu.com
]# hostName=$(hostname)
]# echo $hostName
localhost.localdomain
]# [ -z "$hostName" -o "$hostName" == "localhost.localdomain" -o "$hostName" == "localhost" ] && hostname www.magedu.com
]# echo $hostName
www.magedu.com

向脚本传递参数:
位置参数变量
位置参数变量:写一个脚本,在脚本里边写 $1,$2,...${10},${11},...而$1,$2,...指的是在命令行里边运行脚本后面跟着的参数,第一个参数对应$1,以此类推
bash myscripts argu1 argu2

引用方式:
$1,$2,...${10},${11},...
例:写一个脚本,可以把任意两个整数相加,求和
#!/bin/bash
echo $[$1+$2]

]# bash sum1.sh 7 3
10

轮替:
shift [n]:位置参数轮替

练习:写一脚本,通过命令传递两个文本文件路径给脚本,计算其空白行数之和
#!/bin/bash
#
file1_lines=$(grep "^$" $1 | wc -l)
file2_lines=$(grep "^$" $2 | wc -l)
echo "Total blank lines: $[$file1_lines+$file2_lines]"

]# bash lines.sh /etc/fstab /etc/rc.d/init.d/functions
Total blank lines: 92

特殊变量:
$0:脚本文件路径本身
$#:脚本参数的个数
$*:所有参数,以一个单字符串显示所有向脚本传递的参数
$@:所有参数,传给脚本的参数的列表

过程式编程语言的代码执行顺序:
(1)顺序执行:逐条运行;
(2)选择执行:
代码有一个分支:条件满足时才会执行;
两个或以上的分支:只会执行其中一个满足条件的分支;
(3)循环执行:
代码片断(循环体)要执行0,1或多个来回;

选择执行的写法:
单分支的if语句:
if 测试条件
then
代码分支
fi

双分支的if语句:
if 测试条件;then
条件为真时执行的分支
else
条件为假时执行的分支
fi

示例:通过参数传递一个用户名给脚本,此用户不存在时,则添加之

]# vim useradd.sh
#!/bin/bash
#
if [ $# -lt 1 ]; then
echo "At least one username."
exit 2
fi

if ! grep "^$1\>" /etc/passwd &> /dev/null; then
useradd $1
echo $1 | passwd --stdin $1 &> /dev/null
echo "Add user $1 finished."
fi

shell脚本编程进阶及RAID和LVM应用2的更多相关文章

  1. shell脚本编程进阶及RAID和LVM应用1

    bash脚本编程 脚本文件格式: 第一行,顶格写: #!/bin/bash 注释行:#开头 代码注释:写清楚注释 规范写脚本:适度缩进,添加空白行 编程语言:有编程语法格式,库,算法和数据结构 编程思 ...

  2. Shell—脚本编程进阶

    shell脚本进阶之条件语句 条件选择if语句 https://www.runoob.com/?s=shell&page=1 https://www.cnblogs.com/flylinux/ ...

  3. shell脚本编程进阶

    在linux shell中,通常我们将一些命令写在一个文件中就算是一个shell脚本了,但是如果需要执行更为复杂的逻辑判断,我们就需要使用流程控制语句来支持了.所谓流程控制既是通过使用流程控制语句对程 ...

  4. 《Linux命令行与shell脚本编程大全》 第二十七章 学习笔记

    第二十七章:shell脚本编程进阶 监测系统统计数据 系统快照报告 1.运行时间 uptime命令会提供以下基本信息: 当前时间 系统运行的天数,小时数,分钟数 当前登录到系统的用户数 1分钟,5分钟 ...

  5. 《Linux命令行与shell脚本编程大全 第3版》

    第一部分 Linux 命令行 第1章  初识Linux she1.1   什么是Linux 21.1.1 深入探究Linux 内核 31.1.2 GNU 工具 61.1.3 Linux 桌面环境 81 ...

  6. Shell脚本编程30分钟入门

    Shell脚本编程30分钟入门 转载地址: Shell脚本编程30分钟入门 什么是Shell脚本 示例 看个例子吧: #!/bin/sh cd ~ mkdir shell_tut cd shell_t ...

  7. Linux shell脚本编程(三)

    Linux shell脚本编程 流程控制: 循环语句:for,while,until while循环: while CONDITION; do 循环体 done 进入条件:当CONDITION为“真” ...

  8. Linux shell脚本编程(二)

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

  9. Linux shell脚本编程(一)

    Linux shell脚本编程: 守护进程,服务进程:启动?开机时自动启动: 交互式进程:shell应用程序 广义:GUI,CLI GUI: CLI: 词法分析:命令,选项,参数 内建命令: 外部命令 ...

随机推荐

  1. 关于 layer.open 动态赋值不了的问题

    前情: layer.open({ type:1, // 用的是默认的信息弹框 content: $('#test'), // 这里不用 $('#test').html(), 不然后面获取不了值 }); ...

  2. idea设置方法注释

    1. File-->Settings-->Editor-->Live Templates 1.1 新建Template Group: 命名为 methodNote 1.2 在meth ...

  3. SQL SERVER2014 加密 备份恢复 学习 (一)

    SQL 自2008(还是2005)之后,推出加密功能,可以一定程度上保护数据库的备份安全.以下测试环境为:sql server 2014主要目的:将备份的文件加密,在其它电脑上恢复时必须有证书和密钥才 ...

  4. IOS div上下滑动效果

    内容放在div中 div加样式:width: 100%;height: 100%;z-index: 70;overflow: auto;

  5. js中遍历对象的属性和值的方法

    鉴于循环目标是个对象,length是为undefined,用map等对数组的循环方法不行,对象就用此下方法 for(var key in _this.lists.medicines){ medicin ...

  6. Redis 学习笔记(篇八):事件

    Redis 服务器是一个事件驱动程序,服务器需要处理以下两类事件: 文件事件: Redis 服务器通过套接字与客户端(或者其他 Redis 服务器)进行连接,而文件事件就是服务器对套接字操作的抽象.服 ...

  7. 【AtCoder】ARC068

    ARC 068 C - X: Yet Another Die Game 显然最多的就是一次6一次5 最后剩下的可能需要多用一次6或者6和5都用上 #include <bits/stdc++.h& ...

  8. PostgreSQL练习3

    select dname,count(ename),avg(sal),sum(sal) from emp e,dept d where e.deptno=d.deptno group by dname ...

  9. fiddler笔记:filters选项卡

    Host Show only Intranet Host 只显示内网(如不带"."的主机名)的数据流. Show only Internet Host 只显示互联网(如不带&quo ...

  10. django类视图的使用

    1 类视图引入 以函数的方式定义的视图称为函数视图,函数视图便于理解. 但是遇到一个视图对应的路径提供了多种不同HTTP请求方式的支持时,便需要在一个函数中编写不同的业务逻辑,代码可读性与复用性都不佳 ...