Shell编程的基本用法

1.Shell中的特殊字符

#

注释

;

命令分隔符,可以将多个语句放在一个行执行

‘ ‘

强引用,在单引号中无法引用变量

“ “

类似于‘’,单支持变量

` `

引用命令结果

2.变量

命名规则:以字母开头,可以使用数字字母

变量定义:declare  varName

变量赋值:varName=

变量值引用: $varName

导出变量: export varName[=value]

撤销变量: unset varName

特殊变量:

$?:返回上一条命令的状态返回值

$1,$2...:位置变量

$#:脚本传入的所有参数个数

$*,$@:返回脚本传入的所有参数

3.条件测试

使用格式:

test EXPR

[ EXPR ]

[[ EXPR ]]

文件测试

-a |–e 文件是否存在

-S file套接字文件

-f 普通文件

-p 命名管道文件

-d 目录

-s 是否为空

-L 符号链接

-r 是否可读

-b 块设备

-w 是否可写

-x 是否可执行

-c字符块设备

FILE1 -nt FILE2  :FILE1mtime是否新与FILE2

FILE1 -ot FILE2 :FILE1mtime是否旧与FILE2

 

 

整数

-gt 大于

-ge 大于等于

-eq 等于

-le 小于等于

-lt 小于

- ne不等于

 

字符测试

大于

<   小于

<=  小于等于

>= 大于等于

 == 等于

 = 不等于

-n string 是否不空

-z string 是否为空


4.输入输出和重定向

标准输入:0 默认设备为键盘

标准输出:1 默认设备为显示器

标准错误输出:2 默认设备为显示器

>::覆盖输出 &>错误覆盖输出

>> :追加输出 &>>错误覆盖输出

&>:合并重定向

<:输入重定向

<<:此处文档

tee:分流,将结果输出到屏幕并重定向

 

5.Shell脚本格式

第一行顶格"#!/path/to/a/shell" 

6.常用语法结构

if  then else语句:

 if 条件 1

    then 命令1

 elif  条件 2

     then 命令2

 else  

      命令3

 fi 完成

  如果if和then在同一行那命令格式为 if 条件1;then

 eg

#!/bin/bash

#name.sh

echo -n "Enter youname:"

read NAME

if [ "$NAME" == "" ]; then

  echo "you did not enter you name"

else

  echo "you name is: $NAME"

fi

####保存退出,chmod +x name.sh

#### 运行 ./name.sh

[root@localhost ~]# ./name.sh

Enter you name:tony (这个名字你是输入的)

you nameis: tony

 

for循环:

   for 变量名 in 列表

   do 

         命令1

               命令2

   done      

        

#!/bin/bash

                     #

                     declare -i idsum=0

                     for userid in `cut -d: -f3/etc/passwd`;do

                        idsum=$[$idsum+$userid]

 

                     done

 

                     echo $idsum

   当变量值在列表里,for循环即执行一次所有命令,使用变量名访问列表中取值,命令可为任何有效的shell命令和语句,变量名

为任何单词,in列表用法是可选的,如果不用它,for循环使用命令行的位置参数。in列表可以包含替换,字符串和文件名。

 

until循环:

   until 条件

   do

       命令1

          命令2

         ...

   done

条件可以为任意测试条件,测试发生在循环末尾,因此循环至少执行一次

 

                     #!/bin/bash

                     #

                     read -p "Plz enter ausername: " userName

 

                     until who | grep"\<$userName\>" &> /dev/null; do

                       sleep 5

                       echo "not here"

                     done

 

                     echo "here"

 

 

 

while循环:

      while 命令

      do

          命令1

          命令2

         ...

        done

 while和都之间虽然通常指使用一个命令,但可以放几个命令,命令通常用作测试条件

 

       1、显示如下信息:

              Plz choose a compress tool:

              用户可键入:gzip, bzip2xz;

       2、提醒用户指定要归档压缩的文件

       3、将用户归档压缩至/tmp目录中,文件名为原名加上相应的后缀;

#!/bin/bash

#

read -p "Plzchoose a compress tool:"  tools

 while [ "$tools" == "gzip"-o "$tools" == "bzip2" -o "$tools" =="xz" ];do

   read -p "Plz input a file" file

   while [ -e $file ]; do

   echo "PIZ"

    if

 done

 

由于本人才疏学浅,bash脚本还很不熟悉。请见谅