zoukankan      html  css  js  c++  java
  • Shell编程学习1--基础了解

    "#!path"告诉系统path所指的程序为用来解释此脚本文件的Shell程序: 如#!/bin/sh, #!/bin/bash

    Shell Script的后缀名为.sh; echo命令用于向窗口打印输出文本, 类似于python里面的print. 

    #!/bin/bash
    echo "Hello World"  # 打印输出"Hello World"

    Shell变量

    1) 变量名称的首字符必须为字母(a-z/A-Z),里面可以带下划线; 2) 不能使用bash里面的关键词; 3) 赋值语句的=两边不能有空格.

    使用一个定义了的变量, 要在变量的前面加上美元符号$.

    name="Zhao"  # 等号两边不能用任何空格
    echo $name  # Zhao
    echo "I am ${name}HAHA" # I am ZhaoHAHA

    Shell批处理

    下面的语句可以将./test文件夹中所有的文件名循环出来, 也可以用`ls ./test/*.jpg`--这样只会将test文件夹中的.jpg图像的路径打印出来, 如: ./test/000010.jpg, 其他后缀名的文件不会打印.

    #!/bin/bash
    for file in `ls ./test` # 注意这里用的是后引号``
    do
        echo $file
    done
    # ouput
    000010.jpg
    000011.jpg
    000012.jpg
    000013.jpg
    000014.jpg

    将文件夹Images里面的以Pos开头的图像都复制到文件夹pos里面, 不使用for循环:

    cp ./Images/Pos* ./pos/

    Shell 单引号 vs 双引号 vs 后引号

    1 #!/bin/bash
    2 num=3
    3 str=This is a string  # is: 未找到命令
    4 str='This is a string'  # 可以
    5 echo $num   # 3
    6 echo '$num' # $num
    7 echo "$num" # 3

          Shell中, 角色比较特殊, 它是一个很典型的分隔符, 单引号和双引号的区别是: 单引号将剥夺其中所有字符的特殊含义, 比如上面程序第6行的echo '$num'; 而双引号中, '$'(参数替换)和'``'(命令替换)的含义将不会被剥夺. 两者的区别就是一个剥夺, 而一个不剥夺. 显然, 无论是用单引号还是用双引号来引住This is a string, 都可以将空格这个分隔符的含义剥夺掉.

    expr Expression: expr命令读入Expression参数,计算其值,然后将结果写入到标准输出, Expression可以为:

    1) match string1 string2  # 

    2) length string1  # 输出string1的长度

    3) index string1 string2  # 返回string1中包含string2中任意字符的第一个位置索引

    4) substr string1 StartPosition Length # 返回一个以StartPosition的字符开始在string1中的字符串,而且是长度为Length的字符串

    此命令的一些返回值有特殊含义: 0--Expression参数运算值既不为空也不为0; 1--Expression参数计算值或为空或为0; 2--Expression参数无效; >2--发生了错误.

    这个命令一般用于整数值计算, 但也可以用于字符串操作; 

    作用1: 数学运算器(格式: expr argment operator argment, 注意, 运算符的两边一定要有空格分隔符)

    $ expr 10+10    # +两边没有加空格
    10+10
    $ expr 10 + 10  # +两边必须有空格
    20
    $ expr 10 * 10
    expr: 语法错误   # 使用乘号的时候,注意用转义. 不然会报错
    $ expr 10 * 10
    100
    $expr 10 / 3
    3

    作用2: 增量计数: expr可以在循环中用于增量计算, Shell里面的普通运算竟然也需要expr的协助.

    root@:/# LOOP=1
    root@:/# echo $LOOP
    1
    root@:/# LOOP=`expr $LOOP + 1`
    root@:/# echo $LOOP
    2

    总结: Shell里面的运算还挺抽象麻烦的, 必须借助于expr吗?  

    $ a=1
    $ echo $a
    1
    $ a=$a+1
    $ echo $a
    1 +1          # 这是啥
    $ a=`expr $a + 1`  # 每个空格都要慎重
    $ echo $a
    2

    readonly: 声明只读变量,相当于C++里面的const变量,其值不可修改

    $ a=1
    $ readonly a  # 方式1
    $ a=2
    bash: a: readonly variable
    $ readonly b=1   # 方式2
    $ b=3
    bash: b: readonly variable
    $ readonly c   # 这种形式就不行了
    $ c=1
    bash: c: readonly variable

    unset: 删除变量(相当于MATLAB里面的clear,对变量进行删除, 在MATLAB中, 有时某个变量占用空间较大时, 不用的时候我就在程序中将其删除)

    $ a=1
    $ echo $a
    1
    $ unset a
    $ echo $a   # 无任何输出

     

    参考文献:

    [1] Shell教程: http://www.runoob.com/linux/linux-shell.html

    [2] Linux中expr命令: http://blog.csdn.net/guhong5153/article/details/6542995 

  • 相关阅读:
    第三次作业
    第二次作业
    第一次作业
    实验二
    第一次试验
    第五次作业
    第四次作业
    第三次作业
    第二次作业
    第一次作业
  • 原文地址:https://www.cnblogs.com/zhao441354231/p/6021218.html
Copyright © 2011-2022 走看看