Linux Shell 脚本基本内容

2012-09-24   来源:站长日记       编辑:沧海桑田   类别:服务器    转载到:    发表评论

#!/bin/bash
#脚本用途:
#创建日期:
#Written by someone
正文......

shell中没有声明的变量默认为字符串形式,
比如 var=5*7;
$var就成为字符串形式"5*7",而不会进行算术运算。

声明变量使用declare指令,参数指定声明变量的类型。
delcare [-afirx] var=...
-a 数组 array
-f 函数 function
-i 整数 integer
-r 只读 readonly
-x 通过环境输出变量

read name
read 将用户在键盘上输入的内容放到变量name中。
read name < file 通过重定向改变了输入源为file。

脚本的参数代号
$0 脚本的文件名
$1 第一个附加参数
$2 第二个附加参数
$3 ......
$# 传递给脚本的参数个数
$@ 传递给脚本的所有参数
$$ 脚本的进程号,通常用它来生成唯一的临时文件:/tmp/tmpfile_$$

逻辑判断式
关于文件与目录的逻辑判断,格式是-×× file 或者 ! -×× file(注意!和-xx和file之间有空格)
-f 文件是否存在
-d 目录是否存在
-b 是否为block文件
-c 是否为character文件
-L 是否为符号链接文件
-S 是否为socket标签文件
-e 某个东西是否存在,可以是任何东西

关于程序的逻辑判断,格式是-×× proc
-G 是否由GID所执行的程序拥有
-O 是否由UID所执行的程序拥有

关于文件的属性,格式是-×× file
-r 是否为可读属性
-w 是否为可写属性
-x 是否为可执行属性
-s 是否为非空白文件
-u 是否具有SUID属性
-g 是否具有SGID属性
-k 是否具有sticky bit属性

两个文件的判断与比较,格式是file1 -×× file2
-nt 第一个文件比第二个文件新
-ot 第一个文件比第二个文件旧
-ef 第一个文件和第二个文件为同一个文件(诸如链接文件)

逻辑与、逻辑或
&& 逻辑与
|| 逻辑或

运算符:
-eq 等于
-ne 不等于
-lt 小于
-gt 大于
-le 小于或等于
-ge 大于或等于
-a 双方都成立(and)
-o 单方成立(or)

字符串比较:
= 两个字符串相同
!= 两个字符串不同
-z 空字符串
-n 非空字符串

条件判断:
if [条件判断1] &&/|| [条件判断2]; then
  ……
elif [条件判断1] &&/|| [条件判断4]; then
  ……
else
  ……
fi
注意
在[]中,只能有一个判断式;
在[]与[]之间,可以使用&&或者||结合判断式;
[]中每一个独立的组件之间需要用空格键隔开,这一点尤其要注意,其中组件是指[、]、变量、运算符号和字符串、值等。
例如:
if [ "$var" = "yes" ]; then
case var in
方式一 | 方式×)
  程序段
  ;;
方式二 | 方式×)
  程序段
  ;;
*)
  echo "Usage {方式一|方式二}"
  exit 1
esac

循环:
for((条件1;条件2;条件3))
do
程序段
done

for var in var_list     //var_list是以空格键分开的选择项,多为字符串,例如for var in yes no other或者for var in "yes" "no" "other"
do
程序段
done

下面一段脚本程序演示了$(command)的用法,for命令的参数来自$()中的命令的结果:
for file in $(ls *.sh)
do
lpr $file
done

while [条件]
do
程序段
done

until [条件]
do
程序段
done

调试脚本:
sh [-nvx] scripts
-n 不执行脚本,查询脚本内的语法,若有错误则列出
-v 在执行脚本之前,先将脚本的内容显示在屏幕上
-x 将用到的脚本内容显示在屏幕上,与-v稍微不同

注意:
1.在条件判断时一般使用"$var"的形式,这是为了防止出现var为空的情况,例如:if [ $var = "yes" ]中,如果var为空,那么会出现if [ = "yes" ]的情况,这是不合法的,而if [ "$var" = "yes"]则不会出现该问题。


111

1
111|1 | 鲜花 VS 砸蛋 | 394阅读 0评论