1、 if用法:
格式:
if
Command
Command
.......
else
Command
Command
......
fi
条件表达式:
- 文件表达式
if [ -d ...
if [ -s file
if [ -r file
if [ -w file
if [ -x file
- 整数变量表达式
if [ int1 -ne int2 ]
if [ int1 -ge int2 ]
if [ int1 -gt int2 ]
if [ int1 -le int2 ]
if [ int1 -lt int2 ]
-
字符串变量表达式
if
if
if
if
shell 编程中使用到得if语句内判断参数
–b 当file存在并且是块文件时返回真
-c 当file存在并且是字符文件时返回真
-d 当pathname存在并且是一个目录时返回真
-e 当pathname指定的文件或目录存在时返回真
-f 当file存在并且是正规文件时返回真
-g 当由pathname指定的文件或目录存在并且设置了SGID位时返回为真
-h 当file存在并且是符号链接文件时返回真,该选项在一些老系统上无效
-k 当由pathname指定的文件或目录存在并且设置了“粘滞”位时返回真
-p 当file存在并且是命令管道时返回为真
-r 当由pathname指定的文件或目录存在并且可读时返回为真
-s 当file存在文件大小大于0时返回真
-u 当由pathname指定的文件或目录存在并且设置了SUID位时返回真
-w 当由pathname指定的文件或目录存在并且可执行时返回真。一个目录为了它的内容被访问必然是可执行的。
-o 当由pathname指定的文件或目录存在并且被子当前进程的有效用户ID所指定的用户拥有时返回真。
2、exec 作用(内置命令):
shell的内建命令exec将并不启动新的shell,而是用要被执行命令替换当前的shell进程,并且将老进程的环境清理掉,而且exec命令后的其它命令将不再执行。
因此,如果你在一个 shell 里面,执行 exec ls 那么,当列出了当前目录后,这个 shell 就自己退出了,因为这个 shell 进程已被替换为仅仅执行 ls 命令的一个进程,执行结束自然也就退出了。为了避免这个影响我们的使用,一般将exec命令放到一个shell脚本里面,用主脚本调用这个脚本,调用点处可以用bash a.sh,(a.sh就是存放该命令的脚本),这样会
为a.sh建立一个sub shell去执行,当执行到exec后,该子脚本进程就被替换成了相应的exec的命令。
3、关于循环命令:
(1)until 命令:
until do done:就是说当条件成立时,就停止循环,否则就一直循环下去。
与它相反的“while do done ”当条件成立时,就进行循环,否则就停止循环。
until do done 语法:
until [ 条件 ]
do
程序段
done
(2)for 命令
“for in do done ”当条件成立时,就进行循环,否则就停止循环
for in do done 语法
for arg in "$@"
do
echo $arg
done
(3)while 命令
“while do done ”当条件成立时,就进行循环,否则就停止循环。
while do done 语法
while command1
do
command
command
……
done
4、Shift的用法:
位置参数可以用 shift 命令左移。
比如shift 3表示原来的$4现在变成$1,原来的$5现在变成$2等等,原来的$1、$2、$3丢弃,$0不移动。不带参数的shift命令相当于shift 1。
Shift 命令还有另外一个重要用途, Bash 定义了9个位置变量,从 $1 到 $9,这并不意味着用户在命令行只能使用9个参数,借助 shift 命令可以访问多于9个的参数。
Shift 命令一次移动参数的个数由其所带的参数指定。例如当 shell 程序处理完前九个命令行参数后,可以使用 shift 9 命令把 $10 移到 $1。
eg:
# t_shift.sh 测试shift命令
#!/bin/bash
until [ $# -eq 0 ]
do
echo "第一个参数为:$1,此时共有参数个数: $#"
shift 2
done
$ ./shift.sh 1 2 3 4 5 6
结果:
第一个参数为:1,此时共有参数个数:6
第一个参数为:3,此时共有参数个数:4
第一个参数为:5,此时共有参数个数:2
注: $#表示提供给脚本的参数数量(即 表示此脚本当前有几个变量);若有4个变量,执行 shift 2 后,前2个变量 $1, $2丢弃, $3 --> $1、 $4 --> $2
$* 表示所有这些参数都被双引号引住。若一个脚本接收两个参数,$*等于$1$2
$@ 表示所有这些参数都分别被双引号引住,若一个脚本接收到两个参数,$@等价于$1$2
举例说: 脚本名称叫test.sh 入参三个: 1 2 3 运行test.sh 1 2 3后 $* 为 "1 2 3"(一起被引号包住) $@ 为 "1" "2" "3"(分别被包住) $# 为 3(参数数量)
5、exit
在脚本里面有exit 0 ,exti 1则当运行到这个地方的时候就跳出脚本,不在运行下面的脚本。
通常,exit 0 表示成功, exit 1表示失败