Linux开车—Shell脚本
——shell基础
其实就是纯文本文件,以固定的语法组织起来。
可以编辑这个文件, • 让这个文件帮我们 一次执行多个 命令。
可以通过一些运算与逻辑判断来帮我们达成某些较复杂 的功能。
shell script如何执行?
假设程序文件名是:/home/shell.sh
执行脚本有以下三种方式:
1、直接执行(shell.sh文件必须具备可读与可执行 (rx) • 的权限):
绝对路径:运行/home/shell.sh 来执行指令
相对路径:cd到/home/• ,使用 ./shell.sh • 执行
2、 source • 执行 source • shell.sh
3、•bash执行: • bash • shell.sh • sh shell.sh
Shell脚本的形成顺序:
1、创建shell脚本
2、赋予权限
3、执行脚本
数值运算:简单的加减乘除 格式:$((运算内容)) •
案例:两数相乘(交互shell脚本)
例:total=$(($num1*$num2))
test判断命令
使用范例:test • -e • demo.txt •
判断某个文件类型
-e • 该文件是否存在? • !!!
-f • 该文件是否存在且为文件(file)? • !!!
-d • 该文件名是否存在且为目录(directory)? • !!!
-b • 该文件是否存在且为一个 block • device • 装置? •
-c • 该文件是否存在且为一个 character device • 装置? •
-S 该文件是否存在且为一个 Socket • 文件? •
-p • 该文件是否存在且为一个 FIFO • (pipe) • 文件? •
-L • 该文件是否存在且为一个连接文件? •
判断文件权限
-r • 检查该文件是否存在且具有可读的权限? •
-w • 检查该文件是否存在且具有可写的权限? •
-x • 检查该文件是否存在且具有可执行的权限? •
-s • 检查该文件是否存在且为非空文件?
-u • 检查该文件名是否存在且具有SUID的属性? •
-g • 检查该文件名是否存在且具有SGID的属性? •
判断字符串
test -z • string 判断字符串是否为空?若string为空字符串,则为true
test -n string 判断字符串是否非空?若string为空字符串,则为 false
test str1 • = • str2 • 判断str1是否等于str2,若相等,则返回 true •
test • str1 • != • str2 • 判断str1是否不等于str2,若相等,则返回 false
判断符号[](基本跟test相同) !!!
• [ • ] • 脚本范例 (注意[]和脚本之间保留空格)
• ==和!=用于比较字符串;
• 整数比较只能使用-eq,-gt,ge,lt,le这种形式
• [ ]中的逻辑与和逻辑或使用-a 和-o 表示
• &&、||、<和> 操作符如果出现在[ ]结构中的话,会报错。
——shell参数
比如,ls -al 其中-al就是shell脚本参数,那么我们自己 写的脚本参数该如何使用呢?.
• /path/to/scriptname arg1 arg2 arg3 arg4
• $0 $1 $2 $3 $4
– $0:代表脚本程序本身
– $1,$2,…:代表后面第一个参数,第二个参数,等等
– $# • :代表后接的参数个数,以上边为例,这里显示为4; •
– $@ • :代表 "$1" • "$2" • "$3" • "$4" • ,每个变量是独立 的(用双引号括起来); •
– $* :代表 "$1 • $2 • $3 • $4" •
——条件判断
条件判断语句
if • [ • 条件判断 ]
then
if [ • 条件判断 ]; • then •
条件成立执行,命令;•
fi • 将if反过来写,就成为fi • 结束if语句
&& • 代表 and• || • 代表 or •
• 双分支结构
if • [ • 条件1 • ];then
条件1成立执行,指令集1•
else
条件1不成执行指令集2;
fi •
• 多分支结构
if [ • 条件1 • ];then
条件1成立,执行指令集1
elif [ • 条件2 • ];then
条件2成立,执行指令集2
else
条件都不成立,执行指令集3
fi •
case结构条件句
case • $变量名称 in • “值1")
程序段1
;; •
“值2")
程序段2
;; •
*)#相当于JAVA中default
• exit • 1 •
;;•
esac
——函数定义
function • fname() • {
• 命令
} •
function可省略
shell • script脚本检查
• sh [-nvx] • scripts.sh •
• 选项与参数: •
• -n • :不执行script,仅查询语法的问题; •
• -v • :在执行script前,先将scripts的内容输出到屏幕上; •
• -x • :将使用到的script内容显示到屏幕上,这是很有用的 参数; !!!
——循环语句
– 不定循环:while • do • done until do • done • while与until意义相反
– 固定循环:for • … do • done •
• while循环语句
while • [ • condition • ] ;do
命令
done •
或者
while • [ • condition • ]
do
命令
done •
• until循环语句
until • [ • condition • ];do
命令
done
或者
until • [ • condition • ]
do
命令
done
• for循环语句
• for...do...done循环
– 语法
for 变量名 in 变量取值列表
– do
– 命令
– done
• 提示:在此结构中“in变量取值列表”可省略,省略时相当 于使用for i in “$@”.
:使用大括号的方法给定循环值
[root@tedu example]# echo {5..1}
5 4 3 2 1
[root@tedu example]# echo {a..z}
a b c d e f g h i j k l m n o p q r s t u v w x y
[root@tedu example]# echo 10.0.0.{5..1}
10.0.0.5 10.0.0.4 10.0.0.3 10.0.0.2 10.0.0.1
使用命令给定循环值
使用seq –s 分隔符 起始 步长 终点
[root@tedu example]# seq -s "," 5 -1 1
5,4,3,2,1
获取当前目录下的文件名作为变量列表 打印输出。例:
#!/bin/sh
for num in `ls -F`
do
echo $num
done

浙公网安备 33010602011771号