#!/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"]则不会出现该问题。
#脚本用途:
#创建日期:
#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个