zoukankan      html  css  js  c++  java
  • Mac下Shell脚本使用学习笔记(一)

    参考文献 Shell 教程
    MAC常用终端命令行
    Mac下Shell脚本使用

    1.使用终端创建test.sh:

    (1)进入指定文件夹路径(命令示例:cd Desktop/面向对象程序设计);
    (2)创建test.sh文件(命令示例:touch test.sh);

    (3)创建第一个Shell脚本:

    #!/bin/bash
    echo "Hello World!"
    

    注:#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。
    echo 命令用于向窗口输出文本。
    (4)通过终端运行[附运行 Shell 脚本有两种方法,本文采用第一种]:

    注意:

    • 一定要输入./test.sh而不是,tech.sh
    • 第一次出现错误Permission denied,需先输入chmod u+x ./test.sh //使脚本具有执行权限再执行脚本。

    2.Shelld的基本语法:

    (1)变量:

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

    your_name="Kenn"
    

    变量命名规则同C语言相同,但有一点注意的地方就是变量名和等号之间不能有空格
    ②使用变量时,只要在变量名前面加美元符号即可,如:

    your_name="Kenn"
    echo $your_name //或者 echo ${your_name}
    

    变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界。
    如:

    for skill in Ada Coffe Action Java; do
        echo "I am good at ${skill}Script"
    done   
    

    如果不给skill变量加花括号,写成echo "I am good at $skillScript",解释器就会把$skillScript当成一个变量(其值为空),代码执行结果就不是我们期望的样子了。
    推荐给所有变量加上花括号,这是个好的编程习惯。
    ③已定义的变量,可以被重新定义,如:

    your_name="Tom"
    echo $your_name
    your_name="Kenn"
    echo $your_name
    

    这样写是合法的,但注意,第二次赋值的时候不能写$your_name="alibaba"使用变量的时候才加美元符($)。
    ④只读变量(readonly+变量名,只读变量的值不能被改变)、删除变量(变量被删除后不能再次使用,unset 命令不能删除只读变量)。
    ⑤变量类型(局部变量、环境变量、shell变量)。

    (2)字符串:

    字符串可以用单引号,也可以用双引号,也可以不用引号。(优缺点可见参考链接)
    ①拼接字符串(echo $greeting $greeting_1);
    ②获取字符串长度(echo ${#printf_name});
    ③提取子字符串(第一个字符的索引值为 0,与C语言规范相同,`echo ${printf_name:1:5}

    输出ello,`从字符串第2个字符开始截取五个字符);

    ④查找子字符串(注意:以下脚本中是反引号,而不是单引号):
    例:查找字符 i 或 o 的位置(哪个字母先出现就计算哪个)

    string="runoob is a great site"
    echo `expr index "$string" io`  # 输出 4
    ```</font>
    ####<font face="Times New Roman"><font color=Green>(3)数组:</font></font><br/><font face="黑体">
    bash支持一维数组(不支持多维数组),并且没有限定数组的大小。类似与C语言,数组元素的下标由0开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于0。
    ①定义数组`数组名=(值1 值2 ... 值n)`:在 Shell 中,用括号来表示数组,数组元素用"空格"符号分割开。还可以单独定义数组的各个分量,可以不使用连续的下标,而且下标的范围没有限制。
    ②读取数组:`${数组名[下标]}`,使用`@`符号可以获取数组中的所有元素,例如:`echo ${array_name[@]}`。
    ③获取数组的长度:获取数组长度的方法与获取字符串长度的方法相同,例如:
    ```shell
    # 取得数组元素的个数
    length=${#array_name[@]}
    # 或者
    length=${#array_name[*]}
    # 取得数组单个元素的长度
    lengthn=${#array_name[n]}
    
    ####(4)Shell 注释:
    以`#`开头的行就是注释,会被解释器忽略。通过每一行加一个`#`号设置多行注释。 多行注释还可以使用以下格式: ```shell :<:<<!
    注释内容...
    注释内容...
    注释内容...
    !

    </font>
    ####<font face="Times New Roman"><font color=Green>(5)Shell 传递参数:</font></font><br/><font face="黑体">
    我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:`$n`。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推。(其中` $0 `为执行的文件名,传递的参数中如果包含空格,应该使用单引号或者双引号将该参数括起来,以便于脚本将这个参数作为整体来接收。)具体,可见参考链接。
    
    `$*`与`$@`区别:
    相同点:都是引用所有参数。
    不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,,则 " * " 等价于 "1 2 3"(传递了一个参数),而 "@" 等价于 "1" "2" "3"(传递了三个参数)。</font>
    ####<font face="Times New Roman"><font color=Green>(6)Shell 基本运算符:</font></font><br/><font face="黑体">
    Shell 和其他编程语言一样,支持多种运算符,包括:
    * 算数运算符
    * 关系运算符(关系运算符只支持数字,不支持字符串,除非字符串的值是数字)
    * 布尔运算符
    * 字符串运算符
    * 文件测试运算符
    注意:
    * 表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2,这与我们熟悉的大多数编程语言不一样。
    * 完整的表达式要被```包含.
    * 条件表达式要放在方括号之间,并且要有空格,例如: `[$a==$b] `是错误的,必须写成 `[ $a == $b ]`。[Shell 中的中括号用法总结](https://www.runoob.com/w3cnote/shell-summary-brackets.html)
    * 乘号(*)前边必须加反斜杠()才能实现乘法运算;
    * 在 MAC 中 shell 的 expr 语法是:`$((表达式))`,此处表达式中的 "*" 不需要转义符号 "" 。</font>
  • 相关阅读:
    分布式架构的演进,分析的很详细,很到位
    腾讯云直播user_sig生成注意事项
    应用TortoiseGit为github账号添加SSH keys
    Mysql 告警 :Establishing SSL connection without server's identity verification is not recommended.
    log4j的1.2.15版本,在pom.xml中的顶层project报错错误: Failure to transfer javax.jms:jms:jar:1.1 from https://maven-repository.dev.java.net/nonav/repository......
    log4j.properties 详解与配置步骤
    Java 支持JavaScript脚本计算
    Struts2自定义返回Json类型result
    通过struts2-spring-plugin集成Struts2和Spring,报错:ClassNotFound:*Interceptor.......
    Struts Filter告警:FilterDispatcher <<< is deprecated! Please use the new filters!
  • 原文地址:https://www.cnblogs.com/lvhang/p/12243001.html
Copyright © 2011-2022 走看看