首页 > 代码库 > <LINUX >bash shell 入门 --linux学习笔记

<LINUX >bash shell 入门 --linux学习笔记

首先说下我个人对于shell的理解,我觉得shell是一种通过各种控制语句将linux命令进行集合实现批处理的一种脚本语言.

shell编程入门其实很简单,语法知识并不多,但是高级shell编程就很难,因为shell是用户和linux之间的桥梁,要编写高质量的shell脚本,就需要用户对linux有很全面的认识.

这里我们只分析shell脚本的语法知识,如想透彻的学习linux还需多努力.

shell结构

      1.#!指定执行脚本的shell

      2.#注释行

      3.命令和控制结构

创建shell程序的步骤:

      1.创建一个包含命令和控制结构的文件

      2.修改这个文件的权限使它可以执行,使用chmod u+x

      3.执行 ./example 或者sh exmaple

如下为一个简单的shell脚本,显示当前目录路径,和子文件

     demo.sh

           #!/bin/sh

          #we use pwd to print the directory path

          /bin/pwd

          #we use ls to print the children directories

          /bin/ls

变量

      shell变量有两种

           1.临时变量

                 只在当前文件中起作用。包括用户自定义变量和位置变量

           2.永久变量

                 永久变量又叫环境变量,其值不随脚本的结束而消失

      设置变量的时候直接使用变量名加赋值即可如date=`date`;而在使用该变量的时候加上$,如echo $date

       /~example.sh

         date=`date`

         echo $date

       输出:Tue May 20 07:48:45 EDT 2014

           使用set命令可以列出所有的环境变量

             #set | less

          使用unset可以清除已经定义的变量

           如:#unset date

    位置变量

         类似于c语言的agrc和argv

          例如:

           ls file1 file2 file3

           $0 这个程序的文件名 ls

           $n 这个程序的第n个参数 n >=1

      特殊变量

            $*这个程序所有的参数

            $#这个程序的参数个数

            $$这个程序的PID

            $!执行上一个后台命令的PID

            $?执行上一个命令的返回值

     输入输出操作

         read myname     // 从键盘获取姓名

         echo $myname  //输出姓名

         当然也可以一次读入多个数据,和输出多个数据

          read  p1 p2 p3

          echo $p1 $2 $p3

运算操作

    expr命令: 对整数型变量进行算术运算

       例如:expr 3 + 5 //数字和运算符之间加上空格,不然会输出 3+5 而不是想要的8

                  expr 5 – 2

                  expr 5 \* 2 //需要对*进行转义

                  expr 5 / 2

       在shell运算中没有小括号的定义,如果在多项式中想指定运算步骤应该用expr代替括号

           如      expr `expr 5 – 2 ` \* 2 //其中`为键盘坐上角的符号不是单引号!!!!

  变量测试语句

         用于测试变量是否相等,是否为空,文件类型等

         格式 :test 测试条件 //测试范围:整数,字符串,文件

         字符串测试:

               test str1=str2   //测试两字符串是否相等

               test str1=str2

               test str1             //测试字符串是否不为空

               test –n str1       //同上

                test –z str1       //测试字符串是否为空

         整数测试:

                test intl –eq  int2  //测试相等

                test int1 –ge int2  //测试int1是否大于等于

                 test int1 –gt  int 2 //大于

                  test int1 –le  int     //小于等于

                   test int1 –lt int2     //小于

                   test int1 –ne int2 //测试是否不相等

          文件测试:

                 test –d file       //是否为目录

                 test –f file        //是否为常规文件

                 test –x file       //是否为可执行文件

                 test  -r file        //可读

                  test –w file      //可写

                  test –a file      //文件是否存在

                  test –s file      //文件的大小是否为0

          变量测试语句可以[]进行简化

           test –d $1 等价于 [ –d $1 ] //之间有空格

条件控制语句

       1.if 

         结构:

           if  test –d $1 then

               //TODO

           elif  条件2  then  //else if 

               //TODO

            fi

      2.exit语句

           退出程序执行,并返回一个返回码,返回码为0表示正常退出,非0表示非正常退出

      3.多个条件的联合

            -a : 逻辑与,仅当两个条件都成立时,结果为真

            -o:逻辑或,两个条件只要有一个成立,结果为真

            如  [ –w $file –a –r $file ] //判断文件是否可读可写

      4.for …done 语句

            for 变量 in 名字表 //名字表类似于数组,只是shell中没有数组,所以需要全部罗列 之间用空格隔开

            do

                   命令列表

            done

     5.select 

            select 变量 in 关键字

            do

                  命令列表

            done

           select 把关键字中的每一项做成类似表单,以交互的方式执行do和done之间的命令

       6.case…esac语句

             case 变量 in

                   字符串1)  命令列表1 ;;

                   字符串2)  命令列表2  ;;

              esac

       7.while

            while 条件

             do

                       命令

              done

        8.shift指令

           每执行一次,参数序列顺序左移一个位置,$#的值减1

           用于分别处理每个参数,移出去的参数不在可用

   函数的应用

      函数的定义

          函数名()

         {

                 命令序列

         }

    函数的调用:

       函数名 参数1 参数2 。。。

  脚本的调试

  sh –x script

         执行脚本并显示所有变量的值

  sh –n script

         执行脚本只检查语法错误,将返回所有的语法错误