shell脚本程序

来源:互联网 发布:买卖时机软件下载 编辑:程序博客网 时间:2024/04/23 15:19
    脚本程序的内容以文本的形式存储,运行之前不需要编译,由解释程序执行,一般可运行在除系统软件外的各个领域。shell脚本程序主要用于系统管理和文件操作,它能方便自如的处理大量重复性的系统工作,降低管理员敲击键盘和出现错误的机会。

一、简单脚本示例:

查询是否设置了某参数,是则返回参数值,否则显示未设置;脚本行首必须使用#!符号指定脚本程序的解释程序。
--------------------------------------------------------------------------------
#! /bin/bash
# /home/yan/showenv
if [ $# -ne 1 ];then
   echo“usage:showenv<envname>”
else
   env=`set |grep $ 1`
   if [ -z $env ];then
      echo“Don‘t set env $1”
    else
      echo $env
    fi
fi
--------------------------------------------------------------------------------
在脚本程序编写完成并作为文本保存后,必须更改它的执行权限,# chmod ug+x showenv
脚本程序被设置了可执行权限后,即可在命令行调用,必须指定脚本程序的正确路径,然后执行它:
#./showenv pwd
pwd=/home/yan

二、基本脚本编程

1、条件测试
在shell脚本中需要进行大量的条件测试,大部分的运行动作都给予这些比较结果来进行,在shell中的比较有两种方式:
使用test命令,test 条件表达式
使用中括号! [ 条件表达式 ] (在条件表达式的两边都必须留有一个空格)
其意义和使用的比较表达式是相同的。当条件表达式为真时,传回0(真),为假时,传回非零(1~255).
shell常用的条件运算符
=================================================================================
逻辑运算符
-------------------------------------------------------------
-a              逻辑“与”
-o              逻辑“或”
!              逻辑“否”
-------------------------------------------------------------
文件比较运算符
-------------------------------------------------------------
-e filename     若filename存在,则为真
-d filename     若filename为目录,则为真
-f filename     若filename为常规文件,则为真
-L filename     若filename为符号链接,则为真
-r filename     若filename可读,则为真
-w filename     若filename可写,则为真
-x filename     若filename可执行,则为真
-e filename     若filename存在,则为真
filename1 -nt filename2     若filename1比filename2新,则为真
filename1 -ot filename2     若filename1比filename2旧,则为真
-------------------------------------------------------------
字符串比较运算符,(请注意引号的使用)
-------------------------------------------------------------
-z string        若string长度为零,则为真
-n string        若string长度非零,则为真
string1=string2  若string1与string2相同,则为真
string1!=string2  若string1与string2不同,则为真
-------------------------------------------------------------
运算比较运算符
-------------------------------------------------------------
num1 -eq num2        相等
num1 -ne num2        不等
num1 -lt num2        小于
num1 -le num2        小于或等于
num1 -gt num2        大于
num1 -ge num2        大于或等于
=================================================================================
如:测试两个文件,一个可否执行,一个是否可写
# [ -w show.ls -a -x showenv ]
# echo #?
测试2字符串是否相等
#test $pwd=/home/yan
#echo $?
测试用户ID是否为20000
# [ $UID=20000 ]
# echo $?

2、流程控制(与c语言相似)
(1)if then else语句
if语句测试条件,若为真,则执行if体中某段语句,若为假执行if体外语句
(2)for循环
格式为:
------------------------------------------------------------------------
for  变量名 in 列表
do
      命令
done
------------------------------------------------------------------------
示例:test.1
------------------------------------------------------------------------
#!/bin/bash
# test.1
for var in 1 2 3 4 5
do  echo -n “var”
done
------------------------------------------------------------------------
(3)until循环
until在条件为假时执行命令,直到条件为真
格式为:
------------------------------------------------------------------------
until 条件
do
       命令
done
------------------------------------------------------------------------
(4)while循环
while检测条件为真,则执行循环体内的命令语句,常用于从输入文件中读取数据
格式为:
-----------------------------------------------------------------------
while 条件
do
       命令
done
-----------------------------------------------------------------------
示例:test.2
-----------------------------------------------------------------------
#!/bin/bash
# test.2
number=0
while [ $number -lt 10 ]
do
echo “$number\c”
number=`expr $number+1`
done
echo
-----------------------------------------------------------------------
(5)case语句
case语句提供多重选择,case的模式必须以右括号结束,可指定一些确定的字符串还可以指定如下字符串的集合:
-----------------------------------------------------------------------
*        任意多个字符串
?        任何一个字符
[abc]    a、b、c字符之一
[a-n]    从a到n的任一个字符
/        多重选择
-----------------------------------------------------------------------
示例:test.3接受用户从终端输入字符,并判断输入的字符是否为A、B、C或a、b、c,并输出相应结果
-----------------------------------------------------------------------
#!/bin/bash
#test.3
echo "enter A,B,C:"
read letter
case $letter in
A|a  echo "you enterd A.";;
B|b  echo "you enterd B.";;
C|c  echo "you enterd C.";;
*) echo "not a,b,c";;
esac
-----------------------------------------------------------------------
(6)break及continue
均用于for,while,until循环控制,break会直接跳出循环,continue会中断本次循环,跳到循环开始部分。

3、函数
shell函数由两部分组成,即函数标题和函数体,函数标题就是函数名,而且应该是唯一的。
定义函数的格式:
-----------------------------------------------------------------------
函数名()
{
command;
... ...
command;
}
-----------------------------------------------------------------------

0 0
原创粉丝点击