您的位置:首页 > 运维架构 > Shell

shell的一些基础东西(流程控制等。。。)

2011-01-13 14:28 281 查看
为什么学习脚本

4.4.2 脚本的执行

1.将文件改为可以执行的属性即x属性,然后执行改文件
2.文件后缀名为.sh,用sh来执行

"和'最大的不同在于能不能保存变量内容,单引号里的内容都将变成单纯的字体,而不是特殊的字体.

4.4.3 卷标与运算符declare

不定义变量,那么该变量是呈现字符串的形式,所以任何变量都是字符串

number1=2*3+5*13-32+25
declare number2=2*3+5*13-32+25

在最后输出结果时,$number1为2*3+5*13-32+25,而number2为64

4.4.4 交互式脚本

最简单的交互式指令是read指令,read功能就是将键盘上输入的内容放到变量中.

eg:[root@test test]# read name
VBird
[root@test test]# echo $name
VBird

怎么样定义脚本的参数代号
[root@test test]myscript. opt1 opt2 opt3 opt4
$0 $1 $2 $3 $4
从上面的例子可以看出,只要变量名称为$0,就表示为myscript也就是说 :

$0:myscript. 亦即脚本的文件名
$1:opt1,亦即第一个附加参数
$2:opt2,
$3:opt3

eg:
root@wwwvbird_shells]# cat parm.sh
#!/bin/bash
echo "This script's nmae => $0"
echo "parameters $1 $2 $3"

[root@www vbird_shells]# sh parm.sh hello1 hello2 hello3
This script's nmae => parm.sh
parameters hello1 hello2 hello3

4.4.5 脚本逻辑判断式与表达式

逻辑判断式:
关于文件目录:
-f 常用!检测文件是否存在
-d 常用!检测目录是否存在
-b 检测是否为一个block文件
-c 检测是否为一个character文件
-S 检测是否为一个socket标签文件
-L 检测是否为一个符号链接文件
-e 检测某个东西是否存在!可以是任何东西.

关于程序
-G 检测是否由GID所执行的程序拥有
-O 检测是否由UID所执行的程序拥有
-p 检测是否为程序间传送信息的name pipe 或FIFO

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

两个文件之间的判断比较
-nt 第一个文件比第二个文件新
-ot 第一个文件比第二个文件旧
-ef 第一个文件与第二个文件为同一个文件(如链接文件)

与或非
&& 逻辑与
|| 逻辑或

运算符:
= 等于
!= 不等于
< 小于
> 大于
-eq 等于
-ne 不等于
-lt 小于
-gt 大于
-le 小于或等于
-ge 大于或等于
-a 双方都成立(and)
-o 单方成立(or)
-z 空字符串
-n 非空字符串

4.4.6 条件判断

4.4.6.1 if then fi

if [ 条件一 ] &&(||) [ 条件二 ]; then
elif [ 条件三 ] &&(||) [ 条件四 ]; then

else
fi

这里有强调的是
1.在[]中。只能有一个判断式
2.在[]和[]中,可以使用&&或||结合判断式
3.每一个独立的组件之间需要用空格键隔开

4.4.6.2 case .. esac

语法:
case 种类方式(string) in
种类式一)
程序执行段
;;
种类式二)
程序执行段
;;
*)
echo "Usage: {种类方式一|种类方式二}"
exit 1
esac

种类方式(string)的格式有两种:

直接输入与交互式(先read 变量名,在用$变量名)

4.4.6.3 循环

for:
for((条件1;条件2;条件3))

eg:
[root@www vbird_shells]# cat for.sh
#!/bin/bash

declare -i s
for ((i=1; i<=100;i=i+1))
do
s=s+i
done
echo "The count is ====> $s"

for variable in variable1 variable2 ...

root@wwwvbird_shells]# cat foruser.sh
#!/bin/bash

account=`cut -d ":" -f1 /etc/passwd |sort`
echo "The following is your linux server's account "
for i in $account
do
echo $i
done

while:
[root@www vbird_shells]# cat while.sh
#!/bin/bash

declare -i i
declare -i s
while [ "$i" != "101" ]
do
s=s+i
i=i+1
done
echo "The count is ====> $s"

until:
[root@www vbird_shells]# cat unitl.sh
#!/bin/bash

echo "Press Y/y to stop"
until [ "$yn" = "Y" ] || [ "$yn" = "y" ]
do
read yn
done

4.4.6.3 调试脚本

#sh [-nvx] scripts
-n :不执行脚本,查询脚本内的语法,若有错则列出
-v :在执行脚本之前,先将脚本的内容输出在屏幕上
-x :将用到的脚本内容显示在屏幕上,与-v稍有不同.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: