Linux shell编程与实践(一)之shell变量的使用及输入输出

时间:2024-03-11 14:15:29

1、shell脚本中变量的定义和引用

  (1)变量的定义

    (a)shell变量中的变量名可以字母、数字、下划线组成,但数字不能作为变量名的第一个字符。

    (b)通过赋值符等于“=”来定义一个变量的值

      eg:

        myname = \'galley\'   #字符串类型,不解析任何字符

        course = “asdfgh”  #双引号内部会解析$和反斜杠特殊字符

        sum =100; price = 123

        now_date = `date`    #反引号执行系统命令

    shell的变量类型只有字符串类型,所以当不用引号引起来的时候,要确保变量的值不包特殊的符号,如空格符、美元、&符号。

  (2)变量的引用

    (a)变量的引用,使用美元符号$来加变量名,来引用一个变量的值。

      如:定义变量:programe_name= "httpd"(变量名与等号之间不要有空格)

        引用变量:echo $ programe_name

             echo $ {programe_name}

               

             

    (b)变量名外面的花括号

      是可以选的,加花括号的目的是为了帮助解释器识别变量的边界,比如下面这种情况:

      

       

  (3)变量值的特殊符号引用

    

    

2、shell环境变量、局部变量以及预定义变量

  (1)环境变量

    (a)环境变量一般指在操作系统中用来指定操作系统运行环境的一些参数,如PATH、PWD、USER、当前使用的SHELL名称等。

    (b)常见的环境变量:

        PATH:系统路径

        HOME:当前用户home目录

        HISTSIZE:保存历史命令记录的参数

        LOGNAME:当前用户登录名

        HOSTNAME:主机名称,若应用程序要用到主机名的话,一般是从这个环境变量中取得

        SHELL:当前用户用的是哪一种shell

        LANG/LANGUAGE:和语言相关的环境变量,使用多种语言的用户可以修改此环境变量

        MAIL:当前用户的邮件存放目录

    (a)查看环境变量

        env:显示所有的环境变量

        echo $PATH:显示某个环境变量的值

        

  (2)局部变量

     (a)在shell脚本中由用户自定义的变量。

        shell脚本中定义的变量作用域是从被定义的地方开始,到shell结束为止,起作用域为本脚本,离开本脚本,变量无效。

     (b)在用户登录的shell中定义的变量,重新登录之后该变量消失。

  (3)预定义变量

     (a)预定义变量和环境变量类似,也是在shell一开始是就定义了的,所不同的是,用户只能根据shell的定义来使用这些变量,不能改变它。所有的预定义变量都是由$和另一个符号组成的,常用的shell预定义变量有:

      $# 位置参数的数量  (/bin/sh test.sh 1 2 3

      $*  所有位置参数的内容

      $? 命令执行后返回的状态          #0表示成功 非0表示失败

      $$ 当前进程的进程号

      $!  后台运行的最后一个进程号

      $0 当前执行的进程名

      

3、脚本的输入和输出

  (1)echo 输出

    (a)echo命令发送数据到标准的输出设备,数据采用的是字符串的方式,echo命令可以输出一个变量。

    (b)echo的两个重要参数: 

        -e 识别输出内容里面的转义序列

        -n 忽略结尾的换行

        

  (2)printf输出

    (a)和echo的功能类似,printf也可以输出变量,printf还可以按照格式输出变量

     但是需要注意:

      a)、printf的默认输出没有换行,换行需要自己加“\n”

      b)、printf支持格式化输出

  (3)read输入

      read命令行读取标准输入设备的下一行,标准输入中的新一行到换行符前的所有字符会被读取,并赋值给对应的变量。

      

      

  (4)<<按行输入

     (a)“<<”符用作每行的命令输入来操作数据库

     (b)自动连接ftp服务器来下载数据