zoukankan      html  css  js  c++  java
  • 3.1 shell简介、变量、运算符

    小知识:

    ipcs可以查看系统中创建的ipc进程间通信资源,例如信号量、共享内存等。示例如下:

    什么是shell? 

      shell是核心程序kernel之外的指令解析器,是一个程序,同时是一种命令语言和程序设计语言。

      shell是命令解析器,用户输入命令,它去解析。

    shell的类型:

      ash、bash、ksh、csh、tcsh

    使用cat /etc/shells可以查看系统下的shell,如下所示:

    使用echo $SHELL 可以查看当前用户运行的shell

    Linux下默认的shell是bash

    程序在shell中执行。

    ls命令执行过程:

      我们敲入命令之后命令会传给bash,bash shell解析这个命令,并传给内核,让内核执行相应的程序。

      每一个命令都会在一个新的shell中执行。

    小知识:

    S代表socket文件。 

    查看socket设备文件,使用命令ls /tmp/.X11-unix/X0 -lt,如下所示:

    chown命令:

    chowm  name.groupname filename  或者chowm  name.groupname dir -R递归的修改目录下所有文件所属的用户和用户组。中间是.或者:都可以。

     chgrp只改变用户组,用法chgrp  groupname  filename

      创建一个文件的默认权限是644,创建文件夹的默认权限是755,如下所示:

    这是为什么呢?

    这是因为umask掩码在作怪,机制如下:

    umask的默认值为022(可以使用umask命令查看),在~/.bash_profile文件中。如果修改后,可以使用source ./.bash_profile或者. ./.bash_profile重新加载这个文件,然后就可以生效了。

    小知识:

      ls -lda     -d选项是看目录本身的信息,而不是看目录里面的内容。

     shell知识:

      第一行出现的#不是注释,第一行的#和后面的执行命令!结合,表示要使用哪一个shell解释器来解释这个脚本。

    #!/bin/bash   表示使用bin下的bash来作为解释器。

    其他行的#表示注释。

    变量声明: mytext = "hello world",变量没有类型,引用变量需要使用$。基本需要有执行权限才可以执行。

    第一个shell程序如下:

    1 #!/bin/bash
    2 
    3 hello="hello world"
    4 
    5 echo $hello

    执行结果如下:

    定义变量时,前后不能出现空格。否则报错。取变量的值也可以使用echo ${hello}。

     shell特性:

    1、别名

    2、命令替换

      ls `cat myfile` -alh   通过单反号,把cat myfile的内容输出,传给ls命令

      注意单反号,在键盘的~符号的下方,键盘左上角。

     

    演示如下:myfile.txt中的内容为tmp。

    3、后台处理,将一个进程放到后台执行,类似守护进程

     

    有的linux版本不需要nohup,只需要在命令的最后加上&即可。

    4、管道

    5、重定向

    6、模式匹配

    7、特殊字符

      双引号(“”):用来使shell无法认出空格、制表符和其他大多数特殊字符,比如:

        建立一个带空格的文件touch “wang  bao  ming”。这时候的文件名字就是wang  bao  ming,如果创建文件时不带引号touch  wang  bao  ming,那么会创建出来三

        个文件,文件名字是分别是wang、bao、ming。

      单引号(‘’):用来使shell无法认出所有特殊字符。

      反引号(`):用来替换命令

      反斜杠():用来使shell无法认出特殊的字符,使其后的字符失去特殊的含义,是转义字符。

        例:创建带空格的文件touch  my  file。 文件的名字就是my   file。

      分号(;):允许在一行上放多个命令,mv  1.txt  2.txt; mov  2.txt  3.txt

      &:后台执行命令的符号

      括号():创建成组的命令。

      大括号{}:创建命令块

      竖杠(|):管道标识符

      <>&:重定向标识符

      *?[ ]!:模式匹配

      $:变量名的开头

      #:表示注释,第一行除外

      空格符、制表符、换行符:当做空白

    可以对空格进行转义,使其后的字符失去特殊含义,如下所示:

    abc def是一个文件,不是两个文件。

    变量和运算符:

      变量:

    本地变量只存在于当前shell中,退出当前shell后变量消失。可以使用readonly将本地变量变为只读。在命令行定义myvar=abc,这个myvar变量就是本地变量,退出当前shell时这个变量就消失了。

    readonly变量只能在定义时赋值一次。

    export设置的环境变量可以被这个shell及其所有子进程使用,如果想让任何一个进程使用设置的环境变量,应该在文件中设置。unset用来清除变量。

    PS1最后的 $代表提示符。

    shift可以让参数移动(向左移),示例程序如下:

     1 #!/bin/bash
     2 
     3 echo "parm1 : $1"
     4 echo "parm2 : $2"
     5 echo "parm3 : $3"
     6 echo "parm4 : $4"
     7 
     8 echo "run shift ..."
     9 shift 2
    10 echo "parm1 : $1"
    11 echo "parm2 : $2"

    执行结果如下:

     引号:

      变量和替换操作,在脚本中执行变量替换时,最容易犯的一个错误就是引号的错误。例如:

      将da  * 用双引号引起来和不用双引号引起来结果是完全不一样的。

      双引号:使用双引号可以引用除字符$,`反引号,反斜杠外的任意字符或者字符串。双引号里面的$var是会进行变量替换的。例如:

      加上-e的话shell会去解析双引号里面的回车换行,(-e解析转移字符)例如:

       单引号:单引号与双引号类似,单引号不做任何解释,shell解释器会忽略任何引用值,也就是不会进行变量替换,$var会原样输出。例如:

      单反号:单反号里面的东西是要执行的命令 

      反斜杠:对特殊字符进行转义

     echo -e的实验:

    echo的-e选项会解析双引号中的 换行 ,如下所示:

    双引号中的$var,会引用变量的值,而不是当做字符输出,如上图。而使用单引号时,$就不会引用变量的值了,而是当做字符输出,如下所示:

    单反号``里面的是表示执行命令。

    运算符:

      运算符对象:

        数字、字符(字面量)

        变量

        表达式

      表达式:

        运算符和运算符对象的组合体

        表达式类型:

        按位运算符:

          ~op1       取反

          op1<<op2   左移

          op1>>op2  右移

          op1&op2   按位与

          op1^op2    按位异或

          op1 | op2   按位或

            例:

              echo  $[2<<4]

              echo  $[2^4]

    $[ ]  的意思是告诉shell对方括号中的表达式求值,例: echo  $[3+9]

      

      逻辑运算符:

        && 逻辑与运算

        ||  逻辑或运算, 例:echo  $[1 || 1]

      赋值运算符:

        =、+=、-=、*=、/=、%=、&=、^=、|=、<<=、>>=

        let  count=$count+$change

        let count+=$change

        对变量的运算:可以使用let  var+=5这种方式使var的值自增5。也可以使用var=$[ $var + 5 ]这种方式。 例:

    其它的运算符实验示例:

    表达式替换:

  • 相关阅读:
    Linux基础命令—网卡
    SHOW SLAVE STATUS解读
    perf工具crash的问题
    python学习之-requests模块基础
    DELL IDRAC API接口开发文档翻译及client模块
    cobbler ks文件解释--转载
    django学习之- 动态验证码学习
    django学习之- Ajax
    django学习之- modelForm
    django学习之- json序列化
  • 原文地址:https://www.cnblogs.com/wanmeishenghuo/p/9380893.html
Copyright © 2011-2022 走看看