zoukankan      html  css  js  c++  java
  • 【shell】shell基础

    一、数据类型

    1.shell变量

    运行shell时,会同时存在三种变量:

    • 1) 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
    • 2) 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
    • 3) shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行

    1.1命名规则  

    • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
    • 中间不能有空格,可以使用下划线(_)。
    • 不能使用标点符号。
    • 不能使用bash里的关键字(可用help命令查看保留关键字)。

    1.2引用变量

      $varible_name

      ${varible_name}

    1.3只读变量

      readonly varible_name

    1.4删除变量

      unset varible_name

      注意:unset不能删除只读变量

    2.shell字符串

    2.1单双引号区别

      

    • 双引号里可以有变量
    • 双引号里可以出现转义字符
    • 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
    • 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。

    2.2获取字符串长度

      ${#str_name}

    2.3提取字符串

      echo ${str_name:n:m}  从第N个起截取Mge字符(包括空格)

      

    2.4查找字符串位置

      str="today is monday"

      echo `expr index "${str}" as char` (起始值为1)

      查找字符 m 或 o 的位置(哪个字母先出现就计算哪个):

      

    3.数组

    3.1定义数组

      array_name=(value0 value1 value2 ....)

      或array_name[0]=value1

    3.2读取数组

      获取特定值:${array_name[n]}

      获取所有数值${array_name[@]}

    3.3获取数组长度

      ${#array_name[@]}或${#array_name[*]}

      获取单个元素长度 ${#array_name[n]}

    4.注释

    4.1单行注释 #

    4.2多行注释

    二、shell传递参数

    1.传递参数

    1.1传递参数

      脚本中内容如下:

    1 #!/bin/bash
    2 
    3 echo "Shell 传递参数实例!";
    4 echo "执行的文件名:$0";
    5 echo "第一个参数为:$1";
    6 echo "第二个参数为:$2";
    7 echo "第三个参数为:$3";

      为脚本设置可执行权限并执行脚本,结果如下:

    $ chmod +x test.sh 
    $ ./test.sh 1 2 3  #传入了4个参数
    
    Shell 传递参数实例!
    执行的文件名:./test.sh
    第一个参数为:1
    第二个参数为:2
    第三个参数为:3

     注意:在linux系统中输入以上命令时提示/bin/sh^M:损坏的解释器: 没有那个文件或目录

     这是由于脚本文件在保存时使用了DOS文件格式造成的,可以用vim打开文件,然后执行下列操作:

    :set ff=unix
    :wq

    1.2处理参数的字符

    注意:$*与$@的区别:

    只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,,则 " * " 等价于 "1 2 3"(传递了一个参数),而 "@" 等价于 "1" "2" "3"(传递了三个参数)。

    三、shell运算符

    1.算数运算符

    原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用

    如:val=`expr 2 + 2`或 $[2+2]

    2.关系运算符

      

    3.布尔运算符

      

    4.逻辑运算符

      

    5.字符串运算符

      

    a=10
    b=20
    
    if [ $a != $b ]
    then
       echo "$a != $b : a 不等于 b"
    else
       echo "$a != $b: a 等于 b"
    fi

    6.文件测试运算符

      

    注意:表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2;赋值=左右两端不能有空格

      条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]

      乘号(*)前边必须加反斜杠()才能实现乘法运算;

    四、命令

    1.echo

    1.1显示普通字符串

    1.2显示转义字符串

      echo " "hello" "

    1.3显示变量

    1.4显示换行

      换行: echo -e "today is "

          echo “Friday”

      不换:  echo -e "today is c"

          echo “Friday”

    1.5显示重定向

      echo "it is a test">myfile

    1.6原样输出

      单引号 echo 'my $name '

    1.7显示命令执行结果

      echo `expr date`

    2.printf

    类似c中printf,详见https://www.runoob.com/linux/linux-shell-printf.html

    3.test

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

    详见https://www.runoob.com/linux/linux-shell-test.html

    以下程序效果一样

    五、循环

    1. if else

     1 if condition1
     2 than
     3     command1
     4 elif condition2
     5 than
     6  command2
     7 else
     8 than
     9  command 3
    10 fi
    View Code

     2.for 循环

    1 for var in item1 item2 ... itemN
    2 do
    3     command1
    4     command2
    5     ...
    6     commandN
    7 done
    View Code

    3.while

    while condition
    do
        command
    done

    4.unitil

    until condition
    do
        command
    done

    5.case

     1 casein
     2 模式1)
     3     command1
     4     command2
     5     commandN
     6     ;;
     7 * 8     command1
     9     command2
    10     commandN
    11     ;;
    12 esac
    View Code

    无一匹配模式,使用星号 * 捕获该值,再执行后面的命令。

    6.跳出循环(break和continue)

    六、shell函数

    1.定义函数

    [ function ] funname [()]
    {
        action;
        [return int;]
    }
    • 可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
    • 参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255)
    1 funWithReturn(){
    2     a=1
    3     b=2
    4     echo "两个数字分别为 $a和 $b!"
    5     return $[a+b]
    6 }
    7 funWithReturn
    8 echo "输入的两个数字之和为 $? !"
    View Code

    注意:函数返回值在调用该函数后通过 $? 来获得。 

    2.函数参数

    在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数...

    注意:$10 不能获取第十个参数,获取第十个参数需要${10}。当n>=10时,需要使用${n}来获取参数。

     七、shell文件包含

    . filename   # 注意点号(.)和文件名中间有一空格
    
    source filename
    
    
    1 #!/bin/bash
    2 #使用 . 号来引用test1.sh 文件
    3 . ./test1.sh
    4 # 或者使用以下包含文件代码
    5 # source ./test1.sh
    6 echo "菜鸟教程官网地址:$url"
    View Code
    
    
    













  • 相关阅读:
    LeetCode 867. 转置矩阵
    LeetCode 26. 删除排序数组中的重复项
    LeetCode 905. 按奇偶排序数组
    LeetCode 922. 按奇偶排序数组 II
    CentOS 7.4 系统安装 git
    浅谈final修饰的变量
    【笔试题】京东2017秋招笔试真题
    【笔试题】在 Java 中,如何跳出当前的多重嵌套循环?
    【面试题】反转单链表
    Windows 系统采用批处理命令修改 ip 地址
  • 原文地址:https://www.cnblogs.com/dhs94/p/10819442.html
Copyright © 2011-2022 走看看