linux Shell学习笔记2
1.变量(续)
1.1文件变量
BASH 中的变量除了用于对 整数 和 字符串 进行操作以外,另一个作用是作为文件变量
BASH 是 Linux 操作系统的 Shell,因此系统的文件必然是 BASH 需要操作的重要对象,如 if [ -x /root ]
可以用于判断 /root 目录是否可以被当前用户进入。下表列出了 BASH 中用于判断文件属性的操作符:
运算符 含义( 满足下面要求时返回 TRUE )
-e file 文件 file 已经存在
-f file 文件 file 是普通文件
-s file 文件 file 大小不为零
-d file 文件 file 是一个目录
-r file 文件 file 对当前用户可以读取
-w file 文件 file 对当前用户可以写入
-x file 文件 file 对当前用户可以执行
-g file 文件 file 的 GID 标志被设置
-u file 文件 file 的 UID 标志被设置
-O file 文件 file 是属于当前用户的
-G file 文件 file 的组 ID 和当前用户相同
file1 -nt file2 文件 file1 比 file2 更新
file1 -ot file2 文件 file1 比 file2 更老
注意:上表中的 file 及 file1、file2 都是指某个文件或目录的路径。
1.2 BASH 中的变量与 C 语言中变量的区别
这里我们为原来不熟悉 BASH 编程,但是非常熟悉 C 语言的程序员总结一下在 BASH 环境中使用变量需要注意的问题。
1 BASH 中的变量在引用时都需要在变量前加上 "$" 符号( 第一次赋值及在For循环的头部不用加 "$"符号 );
2 BASH 中没有浮点运算,因此也就没有浮点类型的变量可用;
3 BASH 中的整形变量的比较符号与 C 语言中完全不同,而且整形变量的算术运算也需要经过 let 或 expr 语句来处理;
2.流程控制语句
2.1 分支和判断语句
值得说明的是如果你将 if 和 then 简洁的写在一行里面,就必须在 then 前面加上分号,如:if [ expression ]; then ... 。
if 语句用于判断和分支,其语法规则和 C 语言的 if 非常相似。其几种基本结构为:
if [ expression ]
then
statments
fi
或者
if [ expression ]
then
statments
else
statments
fi
或者
if [ expression ]
then
statments
else
if [ expression ]
then
statments
else
statments
fi
或者
if [ expression ]
then
statments
elif [ expression ]
then
statments
else
statments
fi
2.2 循环控制语句
2.2.1
for 循环结构与 C 语言中有所不同,在 BASH 中 for 循环的基本结构是:
for $var in
do
statments
done
其中 $var 是循环控制变量,是 $var 需要遍历的一个集合,do/done 对包含了循环体,
相当于 C 语言中的一对大括号。另外如果do 和 for 被写在同一行,
必须在 do 前面加上 ";"!
如: for $var in ; do
例子:02recycle
在 for 所在那行的变量 day 是没有加 "$" 符号的,而在循环体内,echo 所在行变量 $day 是必须加上 "$" 符号的。
#另外如果写成 for day 而没有后面的 in
#部分,则 day 将取遍命令行的所有参数。
./02recycle 1 2 3
day
day
day
1
2
3
Sun Mon Tue Wed Thu Fri Sat
2.2.2
while
while 循环的基本结构是:
while [ condition ]
do
statments
done
2.3 case
BASH 中的 case 结构与 C 语言中的 switch 语句的功能比较类似,可以用于进行多项分支控制
case "$var" in #有双引号
condition1 ) #有个右括号
statments1;; #注意分号的个数 2个:第一个分号结束该陈述语句;第二个分号结束该分支选择语句
condition2 )
statments2;;
...
* ) default statments;; #最后其他都不满足的情况下
esac #结束标志
2.4 break/continue 语句
熟悉 C 语言编程的都很熟悉 break 语句和 continue 语句。BASH 中同样有这两条语句,而且作用和用法也和 C 语言中相同,
break 语句可以让程序流程从当前循环体中完全跳出,而 continue 语句可以跳过当次循环的剩余部分并直接进入下一次循环。
1.1文件变量
BASH 中的变量除了用于对 整数 和 字符串 进行操作以外,另一个作用是作为文件变量
BASH 是 Linux 操作系统的 Shell,因此系统的文件必然是 BASH 需要操作的重要对象,如 if [ -x /root ]
可以用于判断 /root 目录是否可以被当前用户进入。下表列出了 BASH 中用于判断文件属性的操作符:
运算符 含义( 满足下面要求时返回 TRUE )
-e file 文件 file 已经存在
-f file 文件 file 是普通文件
-s file 文件 file 大小不为零
-d file 文件 file 是一个目录
-r file 文件 file 对当前用户可以读取
-w file 文件 file 对当前用户可以写入
-x file 文件 file 对当前用户可以执行
-g file 文件 file 的 GID 标志被设置
-u file 文件 file 的 UID 标志被设置
-O file 文件 file 是属于当前用户的
-G file 文件 file 的组 ID 和当前用户相同
file1 -nt file2 文件 file1 比 file2 更新
file1 -ot file2 文件 file1 比 file2 更老
注意:上表中的 file 及 file1、file2 都是指某个文件或目录的路径。
1.2 BASH 中的变量与 C 语言中变量的区别
这里我们为原来不熟悉 BASH 编程,但是非常熟悉 C 语言的程序员总结一下在 BASH 环境中使用变量需要注意的问题。
1 BASH 中的变量在引用时都需要在变量前加上 "$" 符号( 第一次赋值及在For循环的头部不用加 "$"符号 );
2 BASH 中没有浮点运算,因此也就没有浮点类型的变量可用;
3 BASH 中的整形变量的比较符号与 C 语言中完全不同,而且整形变量的算术运算也需要经过 let 或 expr 语句来处理;
2.流程控制语句
2.1 分支和判断语句
值得说明的是如果你将 if 和 then 简洁的写在一行里面,就必须在 then 前面加上分号,如:if [ expression ]; then ... 。
if 语句用于判断和分支,其语法规则和 C 语言的 if 非常相似。其几种基本结构为:
if [ expression ]
then
statments
fi
或者
if [ expression ]
then
statments
else
statments
fi
或者
if [ expression ]
then
statments
else
if [ expression ]
then
statments
else
statments
fi
或者
if [ expression ]
then
statments
elif [ expression ]
then
statments
else
statments
fi
2.2 循环控制语句
2.2.1
for 循环结构与 C 语言中有所不同,在 BASH 中 for 循环的基本结构是:
for $var in
do
statments
done
其中 $var 是循环控制变量,是 $var 需要遍历的一个集合,do/done 对包含了循环体,
相当于 C 语言中的一对大括号。另外如果do 和 for 被写在同一行,
必须在 do 前面加上 ";"!
如: for $var in ; do
例子:02recycle
在 for 所在那行的变量 day 是没有加 "$" 符号的,而在循环体内,echo 所在行变量 $day 是必须加上 "$" 符号的。
#另外如果写成 for day 而没有后面的 in
#部分,则 day 将取遍命令行的所有参数。
./02recycle 1 2 3
day
day
day
1
2
3
Sun Mon Tue Wed Thu Fri Sat
2.2.2
while
while 循环的基本结构是:
while [ condition ]
do
statments
done
2.3 case
BASH 中的 case 结构与 C 语言中的 switch 语句的功能比较类似,可以用于进行多项分支控制
case "$var" in #有双引号
condition1 ) #有个右括号
statments1;; #注意分号的个数 2个:第一个分号结束该陈述语句;第二个分号结束该分支选择语句
condition2 )
statments2;;
...
* ) default statments;; #最后其他都不满足的情况下
esac #结束标志
2.4 break/continue 语句
熟悉 C 语言编程的都很熟悉 break 语句和 continue 语句。BASH 中同样有这两条语句,而且作用和用法也和 C 语言中相同,
break 语句可以让程序流程从当前循环体中完全跳出,而 continue 语句可以跳过当次循环的剩余部分并直接进入下一次循环。