Shell

作者: overflow_hidden | 来源:发表于2017-06-14 17:19 被阅读37次

    !/bin/bash

    echo "Hello World !"
    
    屏幕快照

    #! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。
    echo 命令用于向窗口输出文本。

    1. Shell 变量

    1.1 定义变量
    定义变量时,变量名不加美元符号($,PHP语言中变量需要),如:

      your_name="runoob.com"  //变量名和等号之间不能有空格
    

    命名规范:

    • 首个字符必须为字母(a-z,A-Z)。
    • 中间不能有空格,可以使用下划线(_)。
    • 不能使用标点符号。
    • 不能使用bash里的关键字(可用help命令查看保留关键字)。

    1.2 使用变量
    使用一个定义过的变量,只要在变量名前面加美元符号即可,如:

    your_name="zhanglinyu"
    echo $your_name //控制台打印出 zhangzhong
    echo ${your_name} // 推荐写法
    your_name="zhangzhong"
    echo ${your_name} //控制台打印出 zhangzhong
    //变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,比如下面这种情况:${your_name}Script
    

    1.3 只读变量
    使用readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。

    your_name="zhanglinyu"
    readonly myUrl
    your_name="zhangzhong"
    
    屏幕快照

    **1.4 删除变量 **
    使用 unset 命令可以删除变量。语法:

     unset variable_name //注意不能删除只读变量
    

    1.5 变量类型
    运行shell时,会同时存在三种变量:
    + 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。

    + 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。

    + shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行

    2. Shell 字符串
    字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。 推荐使用双引号

    str="Hello, I know your are ${your_name}!"
    echo ${str} //双引号里面可以有变量和转义字符,单引号不行。
    
    • 获取字符串长度 echo ${#str} //输出29
    • 提取子字符串 echo ${str:1:4} 输出ello

    3. 数组
    bash支持一维数组(不支持多维数组),并且没有限定数组的大小。

    定义数组语法:
    在Shell中,用括号来表示数组,数组元素用"空格"符号分割开。定义数组的一般形式为:

    array_name=(1 2 3 4)
    //或者
    array_name[0]=1
    array_name[1]=2
    array_name[n]=3 //可以不使用连续的下标,而且下标的范围没有限制。
    

    ** 读取数组**

    echo ${array_name[0]} //
    echo ${array_name[@]} //返回数组所有
    

    获取数组的长度

    length=${#array_name[@]}
    echo ${length} //4
    

    注释
    以"#"开头的行就是注释,会被解释器忽略。

    4. Shell 传递参数

     bash test.sh test  
      //则第一个参数是test  
      //我们一般发布命令就要传入test prd之类发布到不同的环境 ,就是通过参数来区别的。
    
    echo "Shell 传递参数实例!";  
    echo "执行的文件名:$0"; 
    echo "第一个参数为:$1";
    echo "传入几个参数:$#";
    echo "输出所有参数:$*"
    echo "脚本运行的当前进程ID号:$$"
    echo "脚本运行的最后一个进程ID号:$!"
    
    //控制台输出
    
    Shell 传递参数实例!
    执行的文件名:test.sh
    第一个参数为:test
    
    屏幕快照

    5.Shell 基本运算符

    • 算数运算符
    • 关系运算符
    • 布尔运算符
    • 字符串运算符
    • 文件测试运算符

    原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。
    expr 是一款表达式计算工具,使用它能完成表达式的求值操作。

    屏幕快照

    例如,两个数相加(注意使用的是反引号 ` 而不是单引号 '):

    val=`expr 2 + 2`
    echo "两数之和为 : $val"
    

    注意: 表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2,这与我们熟悉的大多数编程语言不一样。
    完整的表达式要被 包含,注意这个字符不是常用的单引号,在 Esc 键下边。

    关系运算符
    a=10
    b=20
    
    if [ $a -eq $b ]
    then
       echo "$a -eq $b : a 等于 b"
    else
       echo "$a -eq $b: a 不等于 b"
    fi
    
    //10 -eq 20: a 不等于 b
    
    布尔运算符 逻辑运算符 字符串运算符 文件测试运算符
    file="./test.sh"
    if [ -r $file ]
    then
       echo "文件可读"
    else
       echo "文件不可读"
    fi
    //文件可读
    

    6.echo输出命令

    # 控制台输入 ok  则 name等于ok
    read name 
    echo "$name It is a test"
    echo `date`//获取命令的信息 date是一个执行命令
    echo $(date)//获取命令的信息
    # -e 开启转义
    echo -e "OK! \n $str" 
    
    # 显示结果定向到文件myfile.txt  如果没有这个文件,就会主动创建
    echo "It is a test" > myfile.txt
    
    #原样输出字符串,不进行转义或取变量(用单引号)  输出的就是$str\
    echo '$str\'   
    
    #显示命令执行的时间
    echo `date` 
    

    7.printf输出命令
    Shell不止echo一个输出命令,还有printf。printf 命令模仿 C 程序库(library)里的 printf() 程序。标准所定义,因此使用printf的脚本比使用echo移植性好。想要学习的可以自己Google。

    8.test命令
    Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。

    9.流程控制

    9.1 if else

    if condition
    then
        command1 
        command2
        ...
        commandN 
    fi
    
    if [ ! -z str ]; then echo "true"; fi  //如果变量长度不为0输出true   
    

    9.2 case
    Shell case语句为多选择语句。可以用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。case语句格式如下:

    #! /bin/bash
    env=$1
    case $env in
        test)
            serverPath1=root@127.0.0.3:/usr/
            ;;
        regress)
            zipsTarget1=""
            ;;
         prd)
            serverPath1=root@127.0.0.1:/usr/
            ;;
          *)
            echo "Need to specify env (test | regress | prd)"
            exit -1;
            ;;
    esac
    
    bash test.sh test  //则执行第一条,在前端发布代码区分环境时,经常使用。
    

    还有其他的 for循环,while 语句,until 循环,自行google。

    10.Shell函数

    11. Shell 输入/输出重定向

    输入输出指令
    //ssh-key配置指令
    cat ~/.ssh/id_rsa.pub | ssh  root@127.0.0.1 "cat - >> ~/.ssh/authorized_keys"
    
    #!/bin/bash
    echo "这是重定向输出的文字" > myfile.txt  #会覆盖原来文  件里面的内容
    echo "以追加的形式添加到文件的末尾" >> myfile.txt #以追加的形式添加到文件的末尾
    cat myfile.txt  #读取myfile.txt里面的内容
    //myfile.txt内容
    //这是重定向输出的文字
    以追加的形式添加到文件的末尾
    

    12.rsync命令

    rsync命令是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。 rsync是一个功能非常强大的工具,其命令也有很多功能特色选项,我们下面就对它的选项一一进行分析说明。

    13.Linux 命令大全

    命令参考地址

    14.Mac的一些常用命令

    Mac常用命令

    其它命令

    uname  显示操作系统的有关信息
    clear  清除窗口内容
    env 显示当前所有设置过的环境变量
    who 列出当前登录过的所有用户
    whoami 列出当前正进行操作的用户名
    tty 显示终端或者伪终端的名称
    stty  显示或者重置控制键定义
    du  查询磁盘的使用情况
    df /tmp   显示文件系统的总空间和可用空间
    w   显示当前系统活动的总信息
    date 显示系统当前的时间和日期
    cal 显示日历

    相关文章

      网友评论

          本文标题:Shell

          本文链接:https://www.haomeiwen.com/subject/wrdsqxtx.html