【Linux】shell脚本(二)

七、注释,管道线,后台命令

        (1)注释:以#开头的正文行表示注释

        (2)管道线:管道线是由竖杠“|”隔开的若干个命令组成的序列,每个命令执行时都有一个独立的进程,
  前一个命令的输出是下一个命令的输入;管道线中有一类命令也成为“过滤器”,

即:首先读取输入,然后将以某种简单方式进行变换,相当于过滤,再将处理结果输出,

  如:grep,sort,wc等命令就是过滤器;

        (3)后台命令

如执行文件时:

前台方式:命令提示符之后输入,立即执行
后台方式:可能有些程序的执行需要花费较长时间,如:调用C编译器对C程序进行编译,如果在此同时想做别的事情,则要输入:

          $ gcc  m1.c&

八、命令执行操作符

        (1)作用:

    多条命令可以在一行中出现,它们可以顺序执行,也可能在相邻的命令间存在逻辑关系,即:逻辑“与”和“或

        (2)顺序执行

在执行时,以分号隔开的各条命令从左到右依次执行 
            pwd ;  who | wc  -l ;  cd  /usr/bin

     等价于每条命令独占一行

        (3)逻辑与 &&
一般格式:命令1 && 命令2
其功能是:先执行命令1,如果执行成功,才执行命令2;
          否则,若命令1执行不成功,则不执行命令2。 

例:  $cp ex1 ex10 && rm ex1

            执行过程:如果成功的把ex1文件复制到ex2文件则删除ex1文件

        (4)逻辑或||
一般格式为:命令1 || 命令2
其功能是:先执行命令1,如果执行不成功,则执行命令2;
          否则,若命令1执行成功,则不执行命令2。 
例:  $cat abc || pwd
如果不能将文件abc的内容列出来,

则显示当前的工作目录的绝对路径。

九、成组命令

Shell中有两种方式可以将若干命令组合在一起,使其在逻辑上,被视为一条命令。

组合命令方式有两种:花括号{}和圆括号()

用法很简单这里就不多说了,注意{}和()在格式上面的区别


十、shell变量

Shell有两类变量:环境变量和临时变量。其中,
环境变量
  永久性的变量,其值不会随shell脚本执行结束而消失;
临时变量

   在shell程序内部定义,使用范围仅限于定义它的程序,出了本程序之外不能再使用,当程序执行完毕,它的值也就不存在了。

        (1)用户定义的变量

1.用户定义的变量是最普通的shell变量,变量名是以字母或下线符打头的字母、数字和下线符序列,且大小写字母意义不同。 
2.  变量赋值
    定义变量并赋值的一般形式是:     变量名=字符串
       例如: myfile=/usr/meng/m1.c

 3.引用变量值: 在变量名前面加上一个符号“$” 

注意:如果在赋给变量的值中要含有空格、制表符或换行符,
  那么,就应该用双引号把这个字符串括起来。

    $ names="Zhangsan  Lisi  Wangwu"

注意:如果变量值须出现在长字符串的开头或者中间,为了使变量名与其后的字符区分开,避免shell把它与其它字符混在一起视为一个新变量,则应该用花括号将该变量名括起来。
例如,
      $ dir=/usr/meng 

      $ cat  ${dir}qc/m1.c       不能直接$ cat  $dirqc/m1.c

        (2)数组

    bash只提供一维数组,并且没有限定数组的大小。

        (3)变量引用

有很多方式可以百度,一般都用$


十一、输入输出命令

输入:read

输出:echo


十二、位置参数


十三、环境变量

Linux环境,也称为shell环境,由许多变量以及这些变量的值组成;

Shell环境包括:使用的shell类型、主目录所在位置、正在使用的终端类型等等;

具体查看更改环境变量可以百度


十四、export语句

        (1)设计父子进程私有区转到export区

为了使其后的各个子进程能继承父进程中定义的变量,就必须用export(转出)命令将这些变量送入进程转出区。 
export命令的一般使用形式是:

export  [ 变量名 ],同一个export命令行上可以有多个变量名。


十五、算数运算

bash中执行整数算术运算的命令是let,其语法格式为:
                   let arg …
     其中arg是单独的算术表达式。
例如:      let “j=i*6+2”

等价于: ((j=i*6+2))

注意:
①当let命令计算表达式的值时,
  若最后结果不为0,则let命令返回值为0,表示“真”;
  否则返回值为1,表示“假”

这样,let命令可用于if语句的条件测试,

②运算符分优先级,其中1级最高,15级最低;

可以使用括号,用来改变运算符的操作顺序,即:
         先计算括号内的表达式;

当表达式中有shell的特殊字符时,必须用双引号将其括起来。

③只有使用 $((算术表达式))的形式才能返回表达式的值

$ echo “((12*9))”
  ((12*9))
$ echo “$((12*9))”
   108


十六、控制结构

Shell具有一般高级程序设计语言所具有的控制结构,
如:if ,case语句,循环结构和函数等。

在shell中,这些控制结构也称为“命令”,为了程序设计的习惯,才把它们称为语句。

    (1)if语句

       ① 格式:

            if  测试条件(test)

            then  命令1
            else  命令2

           fi (if语句结束)

        ②通常if语句的测试条件部分是利用test命令实现的。

test命令各选项的含义:(百度)

        ③条件判断部分也可以用一般命令执行成功与否来判断,所以if语句更一般的表达形式是:

        if  命令表1
        then  命令表2
        else  命令表3

        fi

        ④if语句中else部分可以缺省

        ⑤if 语句的else部分还可以是else—if结构,则用关键字“elif”代替“else  if”。例如,

  if  test  - f  "$1"
                  then  echo  "$1  is  an  ordinary  file . " 
                 elif  test  - d  "$1"
                  then  (cd  $1 ;  ls)
                  else  echo  "$1  is  neither  a  file  nor  a  directory . "

                fi

        ⑥当测试条件由一条或多条命令组成时,以最后一条命令是否执行成功为准,来判断then和else

        

        (2)条件测试

        (3)case语句

        (4)while语句

        (5)until语句

        (6)for语句

        (7)break和continu语句

        (8)exit命令

        (9)select语句

        (10)函数

        (11)shell内置命令

        (12)shell脚本调试

                解决环境设置问题

                解决脚本错误







猜你喜欢

转载自blog.csdn.net/toby1123yjh/article/details/79925825