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

Shell脚本基础总结

2014-06-30 16:22 337 查看
1、  Shell脚本的执行方式

a)      
sh命令执行:sh
hello.sh

b)      
给脚本文件添加执行权限,使用./命令执行:chmod 755 hello.sh   ./hello.sh

2、  Shell的基本元素

a)  #!/bin/bash: 指出shell的类型,不指定的话默认是 /bin/sh

b)  注释:#注释内容

c)  变量:${变量名}

d)  控制:

3、  Shell中的特殊符号

a)  注释符#      除了#!/bin/bash里的#特殊

b)  美元符$ 

变量符。与反斜杠转义符相反,使其后的普通字符作为变量名,如$a表示变量a的值。变量字符长度超过1个时,用{}括起来

c)  单引号  被引起的字符全部做普通字符,即全部原样

            echo
‘my $SHELL’

d)      
双引号

引号内的内容,除$、转义符\、倒引号`这三个保留特殊功能,其他字符均做普通字符。

e)      
倒引号(数字1键旁边的那个键)

引号内的字符串当做shell命令行解释执行,得到的结果取代整个倒引号括起来的部分。

f)       
反斜线

反斜线是转义字符,它能把特殊字符变成普通字符。在某个字符前面利用反斜杠(\)能够阻止shell把后面的字符解释为特殊字符。

4、  Shell变量

a)      
本地变量
(局部变量):只在创建它们的Shell中使用,可以在shell程序内任意使用和修改它们。

本地变量 在用户现在的shell生命期的脚本中使用

变量名=值

注意:

(1)等号两边不可以有空格

(2)取值包含空格,必须用双引号括起来

       (3)Shell变量可以用大小写字母,区分大小写

变量的声明和使用

(1)变量是弱类型的(不用声明类型)

(2)变量声明及赋值格式

     变量=值(等号两边不能有空格)

(3)变量的引用

     $变量名  

     ${变量名}

 

b)      
环境变量:可以在创建它们的Shell及其派生出来的任意子程序中使用。有些变量是用户创建的,其他的则是专用的(比如PATH、HOME)。是系统环境的一部分,不必去定义它们,可以在shell程序中使用它们 。还能在shell中加以修改。


环境变量可以在命令行中设置,但用户注销时这些值将丢失


环境变量均为大写


必须用export命令导出

(1)    
设置环境变量

   variable-name=value

  export variable-name(环境变量名大写)

(2)    
显示环境变量

  env 可以看到所有的环境变量

  echo $环境变量名 (显示一个变量)

(3)    
清除环境变量

  unset 环境变量名

 

c)      
内部变量:由系统提供的。与环境变量不同,用户不能修改它们。

$#——传送给shell程序的位置参数的数量

$?——最后命令的完成码或者在shell程序内部执行的shell程序(返回值)

$0——shell程序的名称

$*——调用shell程序时所传送的全部参数的单字符串, “参数1”“参数2”…形式保存的参数

$@——“参数1”“参数2”…形式保存的参数

$n——第n个参数

$$——本程序的PID

$!——上一个命令的PID

5、  条件测试

可以判断脚本程序运行的状态

主要有三种形式:

a)      
test expression

b)      
[ expression ]

c)      
[[ expression ]]

注意:


方括号的内侧两边各需一个空格


如果测试条件为真,test命令会返回0,否则返回一个非0的数值


test 语句与if/then和case语句一起,构成shell编程的控制转移结构 

区别test、[、[[


test、[
是 bash命令。


[[ 是bash程序语言中的关键字。


[[ 中使用
&& 和
||逻辑符号,可用通配符(使用通配符时字符串不要引号);

Expression:

(1)      
数值测试

-lt        小于         -le  小于等于         -gt  大于

-ge      大于等于     -eq   等于           -ne 不等于

(2)      
文件测试

-f         存在且是普通文件

-d        存在且是目录

-s         存在且字节数大于0

-r         存在且可读

-w       存在且可写

-x         存在且可执行

(3)      
字符串测试

test
s                 字符串s非空

test
s1=s2           字符串s1等于s2

test
s1!=s2                   字符串s1不等于s2

test
–z s         字符串长=0,即为空串

test –n
s      字符串长>0

(4)      
其他参数

-a        逻辑与

-o        逻辑或

!       逻辑非

6、  控制流程

a)      
分支语句:if-then-else和case

if分支

 

if
[ $# -eq 0 ]

then

   echo “输入了0个参数”

elif
[ $# -gt 1 ]

then
echo “输入了多个参数”

else
echo “输入了1个参数”

fi

 

case

 

case
“$#” in

   0) echo “输入了0个参数”   ;;

     1)
echo “输入了1个参数”   ;;

       *) echo “输入了多个参数”;;

esac

每个分支条件后必须以两个分号结尾

                               一些比较有用的命令:

                                     seq命令:产生1-9的数字序列;

expr命令:将其后的串解释为表达式并计算其值,运算符前后需有空格;用于整数值运算。

$[]将中括号内的表达式作为数学运算先计算结果再输出。

let表示强制进行数学运算,以为系统默认“+”等运算符是作为字符串处理的。

let
“a+=1"

a=$[
$a + 1 ]

a=$(($a+1))

a=`expr
$a + 1`         #加号两边要有空格

                                     前两种方式在bash下有效,在sh下会出错。

b)      
循环语句:for
while和until

for
例子——输出100内10的倍数

 

    for i in `seq 1  9`

    do

             echo `expr $i \* 10`

             done

 

read
变量1 [变量2 …]

可以从键盘上读取多个变量的值,用户输入数据时,以空格或者Tab键作为分隔。

如果输入的数据个数不够,则从左到右对应赋值,没有输入的变量为空;

如果输入的数据个数超了,则从左到右对应赋值,最后一个变量被赋予剩余的所有数据。

while例子——求1到100的和

i=1

sum=0

while
[ $i –le 100 ]

do

    sum=$[$sum+$i]

  i=$[$i+1]

done

                                         echo $sum
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: