zoukankan      html  css  js  c++  java
  • (七)shell编程学习

    1、shell程序练习:创建一个dir文件夹,在dir文件夹里再创建一个cd.c文件

    首先vim hello.sh

    2、shell中的变量定义和引用

    (1)变量定义和初始化。shell是弱类型语言(语言中的变量如果有明确的类型则属于强类型语言;变量没有明确类型就是弱类型语言),和C语言不同。在shell编程中定义变量不需要制定类型,也没有类型这个概念。
    (2)变量定义时可以初始化,使用=进行初始化赋值。在shell中赋值的=两边是不能有空格的。
    注意:shell对语法非常在意,非常严格。很多地方空格都是必须没有或者必须有,而且不能随意有没有空格。
    (3)变量赋值,变量定义后可以再次赋值,新的赋值会覆盖老的赋值。shell中并不刻意区分变量的定义和赋值,反正每个变量就是一个符号,这个符号的值就是最后一个给他赋值时的值。
    (4)变量引用。shell中引用一个变量必须使用$符号,$符号就是变量解引用符号。
    注意:$符号后面跟一个字符串,这个字符串就会被当作变量去解析。如果这个字符串本身没有定义,执行时并不会报错,而是把这个变量解析为空。也就是说在shell中没有被定义的变量其实就相当于是一个定义并赋值为空的变量。
    注意:变量引用的时候可以$var,也可以${var}。这两种的区别是在某些情况下只能用${var}而不能简单的$var

    3、shell中无引用、单引号和双引号的区别

    (1)shell中使用字符串可以不加双引号,直接使用。而且有空格时也可以,但是缺陷是不能输出"或者其他转义字符。
    (2)shell中也可以使用单引号来表示字符串,也是直接使用的,不能输出转义字符。

    (3)单引号中:完全字面替换(不可包含单引号本身)
    (4)双引号中:
    $加变量名可以取变量的值
    反引号仍表示命令替换
    $表示$的字面值 输出$符号
    \`表示`的字面值
    "表示"的字面值
    \表示的字面值
    除以上情况之外,在其它字符前面的无特殊含义,只表示字面值。

    5、shell中调用linux命令
    (1)直接执行
    (2)反引号括起来执行。有时候我们在shell中调用linux命令是为了得到这个命令的返回值(结果值),这时候就适合用一对反引号(键盘上ESC按键下面的那个按键,和~在一个按键上)来调用执行命令。

    6、shell中的选择分支结构
    (1)shell的if语言用法很多,在此只介绍常用的,其他感兴趣可以自己去学
    (2)典型if语言格式
    if [表达式]; then
     xxx
     yyy
     zzz
    else
     xxx
     ddd
     uuu
    fi

    注意if [ -f a.txt ];then 中[ ]里面-f前面和a.txt后面要有空格。
    (3)if的典型应用
    判断文件是否存在。(-f),注意[]里面前后都有空格,不能省略。
    判断目录是否存在  (-d)
    判断字符串是否相等("str1" = "str2"),注意用一个等号而不是两个


    判断数字是否相等(-eq)、大于(-gt)、小于(-lt)、大于等于(-ge)、小于等于(-le)  回忆一下在ARM裸机中讲述ARM汇编条件执行时,曾经用过这些条件判断的缩写。(eq就是equal,gt就是greater than,lt就是less than,ge就是greater or equal,le就是less or equal)


    判断字符串是否为空(-z)注意-z判断时如果变量本身没定义也是不成立(也就是说-z认为没定义不等于为空)

    (4)if判断式中使用“-o”表示逻辑或
    相当于C语言中在if后面的条件式中用逻辑与、逻辑或来连接2个式子,最终的if中是否成立取决于2个式子的逻辑运算结果。

    (5)逻辑与&&和逻辑或||与简写的if表达式相结合

    如果[ -Z $str ]为真,则不执行echo"feikong",为假则执行

  • 相关阅读:
    几种 JavaScript 动画库推荐
    微软工程师为你推荐了十本程序员必读书目
    前端新老手必备的34种JavaScript简写优化技术
    Airbnb 爱彼迎 visx 项目介绍
    开源中间件技术支持(5000+元/天)
    C# Byte数组与Int16数组之间的转换(转)
    【636】K.sum 与 np.sum 的区别
    【635】语义分割 label 通道与模型输出通道的
    【634】ndarray 提取行列进行任意变换 & 相关 ndarray 操作
    面试官:设计一个安全的登录都要考虑哪些?我一脸懵逼。。
  • 原文地址:https://www.cnblogs.com/zhangshenghui/p/5845515.html
Copyright © 2011-2022 走看看