zoukankan      html  css  js  c++  java
  • shell琐碎

    shell程序的基本特征(解释型语言):

    1.所有shell程序第一行都是以#!开头,后面跟上执行此shell程序的shell解释器的完整路径。

    2.习惯在程序的第二行以注释的方式写出程序的名称。

    3.最简单的shell程序就是一组shell命令的堆砌。

    4.shell程序就是普通的文本文件,添加可执行权限后方可执行(chmod +x *.sh)。


    shell中的变量分为:局部变量,环境变量,位置变量。

    shell是一种解释型语言,与C、JAVA不同,在编程时无需事先声明变量,当对一个变量赋值时也就定义了该变量。局部变量:只在当前的进程和程序中有效的变量。

    shell中的变量是无数据类型的,可以使用同一变量存放不同类型的值。变量赋值后只需在变量前加$符号,即可访问变量的值。可用赋值符号(=)为变量赋值,变量的值如果不是带空格的字符串则可不必加引号。变量输出使用的指令:echo。


    环境变量:一个用户的所有进程中都可以访问的变量。

    export命令查看系统的环境变量列表。

    环境变量的访问:需要在一个环境变量前加一个$符号

    环境变量的定义:使用export命令定义环境变量,环境变量的名称一般都是大写的。

      export XX=123 此种定义在重新引导系统时会失效。

      echo $XX

    在系统配置文件中定义环境变量:上面定义的环境变量,只在当前shell中运行的所有进程中有效。可以在系统配置中加入这些环境变量的定义。在环境变量配置文件/etc/profile中定义两个环境变量:

      export A1=hell

      export A2=123


    位置变量:是shell程序在运行时传入的参数。程序中可以用变量的形式来调用这些参数。这些参数存放在1到9的9个特殊的变量名中,被形象的称为位置变量。同普通变量一样,位置变量用前缀$加数字来表示。如:第5个参数,表示为$5。


    shell中的不常用的运算符:**对两个变量的幂运算,+=,%=,/=...

      t=`expr $1**$2`(注意反单引号,命令替换)    #用expr改变运算顺序,求x的y次方。($1$2位置变量)

      t=$[t*3]

      s=$[s+t]

    (+-*/两边要有空格)


     输入和输出


      echo $str

      echo $str>file    #将结果报错到file中,如果没有文件会新建一个文件。如果已经有文件则会覆盖以前的文件。

      echo $str>>file   #将结果追加到文件file中。

    echo输出的内容可以有下面的格式控制字符:

      \c:末尾追加上\c表示这一行输出完毕后不换行。

      \t:输出一个挑个,相当于按下‘tab’键。

      \n:输出一个换行。


    read:从键盘或文件中读入信息,并赋给一个变量。

    如果多个变量时多个变量用空格隔开。

    在读取语句后天就<filename,表示从文件中读取数据并赋给变量。


    文件重定向:执行命令时指定命令的输入、输出和错误的输出和出入方式。

    (修改了默认的数据流向)(输出>、>> 输入<)(标准输入0,标准输出1,标准错误2)

    command>filename        把标准输出重定向到一个文件中(会清空原有内容)

    command>>filename      追加方式

    command 1>filename     标准输出设备编号为1,上面的省略了,其实是等价的

    command>filename 2>&1 把标准输出和标准错误一起重定向到一个文件中(2表示标准错误)

    command 2>filename    把标准输出的错误重定向到一个文件中

    command>>filename 2>&1  把标准输出和标准错误一起追加到一个文件中

    command< filename > filename2  把command命令以filename文件作为标准输入,以filename2文件作为标准输出

     command < filename


    shell 中的单引号、双引号、反引号、反斜线在命令中的特殊含义。

    双引号:引用一个字符串。字符串里不能直接使用$、引号、双引号、反斜线、反引号这些特殊符号。如果字符串里没有空格,则与不使用双引号效果相同。

    单引号:引用一个字符串,并忽略特殊符号。如果双引号中再使用单引号,则输出时会输出这个单引号。

    双引号要想输出双引号,要用反斜线。单引号的字符串如果要包含单引号,也要用反斜线。字符串中要使用单引号,可以用双引号将其引起来,避免使用反斜线。单引号中使用双引号,也不需使用反斜线。

    反引号用于执行引号中的系统命令,并将命令结果返回,返回结果可赋给一个变量。(命令替换)

    反斜线对特殊符号转义。

      var1=1000

      echo "hello linux $var1"  

      结果:hello linux 1000

      var1=1000

      echo ’hello linux $var1

      结果:hello linux $var1

      echo "hello "linux""

      结果:hello linux

      echo "hello \"linux\""

      结果:hello "linux"

      echo 'hello "linux"'

      结果:hello "linux"


    测试语句

    对变量大小、字符串、文件属性等内容进行判断。

    test 字符串、数字、文件状态等内容的测试。

    文件状态测试:文件的权限、有无、属性、类型等内容进行判断。与其他语言不同的是,test命令的测试结果,返回0时表示测试成功。返回1时表示测试失败。

    文件状态测试表

    -d测试文件是否是目录文件。 -s测试文件是否非空。
    -f测试文件是否是正规文件。 -w测试文件是否可写。
     -L测试文件是否是是符号链接文件。 -u测试文件是否有suid位设置。
     -x测试文件是否可执行。 -r测试文件是否可读 。

     数值测试:比较两个数值大小或相等关系,相当c中的比较运算符。shell中的数值测试有下面2种情况。

     1.test 第一个操作数 操作符 第二个操作数

    2.用中括号代替test命令。[ 第一个操作数 操作符 第二个操作数 ] 注意括号处有空格。

     数值比较符表

    -eq是否相等 -ne是否不等
    -le第一个数是否不大于第二个数 -ge第一个数是否不小于第二个数
    -gt第一个数是否大于第二个数 -lt第一个数是否小于第二个数

     

     逻辑测试:将多个条件进行逻辑运算,常用作循环语句或判断语句的条件。

    三种逻辑测试:-a逻辑与;-o逻辑或;!逻辑非,条件为假时结果为真;

    字符串测试:是否相等或为空。

    test 字符串 字符串比较符 字符串      [ 字符串 字符串比较符 字符串 ]

    test 字符串1  字符串比较符 字符串2       [ 字符串1 字符串比较符 字符串2 ]

    字符串比较符:=;!=;-z(测试字符串是空字符串);-n(测试字符串是非空字符串)


    流程控制结构


    if 条件1

      then 命令1

    elif 条件2

      then 命令2

    else 命令3

    fi

    if 条件1;then 命令1

     elif 条件2; then 命令2

     else 命令3

    fi

    #!/bin/bash

    # judge a file is writeable

    if test -z $1

      then echo 'please input a file name'

    else

      if test -w $1

        then echo "writeable"

      else

        echo "unwriteable"

      fi

      if test -x $1

        then echo "executeable"

      else

        echo "unexecuteable"

      fi

    fi


    for 变量名 in 列表

    do

      命令1

      命令2...

    done

    for char in a s d f g

    do

      echo $char

    done

    for str

    do

      echo $str

    done

    (从位置变量列表读)

  • 相关阅读:
    二分使用条件 + 代码模板
    Codeforces Round #710 (Div. 3) Editorial 1506A
    Cf #709 Div. 2 B. Restore Modulo 一个只有三千多人过的b题, 妙啊!
    牛客网 第十八届浙大城市学院程序设计竞赛(同步赛)J--万万没想到 啦啦啦啦啦
    Codeforces Round #707 (Div. 2)A.英语漏洞 + C.Going Home C题收获不小
    Codeforces Round #706 (Div. 2)B. Max and Mex __ 思维, 模拟
    Codeforces Round #705 (Div. 2) B. Planet Lapituletti(镜像时钟) 思维
    位运算
    Edu Cf Round 105 (Div. 2) B. Berland Crossword 1.读懂题, 2. 思维
    Codeforces Round #703 (Div. 2)__ B. Eastern Exhibition__ 纯纯的思维
  • 原文地址:https://www.cnblogs.com/IceKernel/p/2652025.html
Copyright © 2011-2022 走看看