• SHELL基础语法


      • Shell脚本的第一行必须是如下格式:

      v#!/bin/sh

      符号#!用来指定该脚本文件的解析程序。在上面例子中使用/bin/sh来解析该脚本。当编辑好脚本后,如果要执行该脚本,还必须使其具有可执行属性。

      chmod +x filename

      shell编程中,所有的变量都由字符串组成

      并且不需要预先对变量进行声明,s1:

      #!/bin/sh

      #set variable a

      a="hello world"

      # print a

      echo "A is:"

      echo $a

      有时候变量名很容易与其他文字混淆,比如:

      S13:

      num=2

      echo "this is the $numnd“

      这并不会打印出"this is the 2nd",而仅仅打印"thisis the ",因为shell会去搜索变量numnd的值,但是这个变量时没有值的。可以使用花括号来告诉shell们要打印的是num变量:

      num=2

      echo "this is the ${num}nd"

      这将打印:this is the 2nd

      • 默认变量
      • $# :传入脚本的命令行参数个数

      v$* :所有命令行参数值,在各个参数值之间

      留有空格

      v$0 :命令本身(shell文件名)

      v$1 :第一个命令行参数

      v$2 :第二个命令行参数

      S2:

      #!/bin/sh

      echo "number of vars:"$#

      echo "values of vars:"$*

      echo "value of var1:"$1

      echo "value of var2:"$2

      echo "value of var3:"$3

      echo "value of var4:"$4

      运行./s2 1 2 3 4

      输出结果:?

      • 局部变量

      在变量首次被赋值时加上local关键字可以声明一个局部变量,例s3:

      #!/bin/bash

      hello="var1"

      echo $hello

      function func1 {

      local hello ="var2"

      echo $hello

      }

      func1

      echo $hello

      • 变量(注意)

      1.  变量赋值时,“=”左右两边都不能有空格

      2.  BASH中的语句结尾不需要分号

      • IF语句

      vif [ expression ]

      then

      #code block

      fi

      vif [ expression ]

      then

      #code block

      else

      #code block

      Fi

      vif [ expression ]

      then

      #code block

      else if [ expression ]

      then

      #code block

      else

      #code block

      fi

      fi

      vif [ expression ]; then

      #code block

      elif [ expression ]

      then

      #code block

      else

      #code block

      fi

      Fi

      • 比较

      比较操作整数操作字符串操作

      相同 -eq =

      不同 -ne !=

      大于 -gt >

      小于 -lt <

      大于或等于 -ge

      小于或等于 -le

      为空 -z

      不为空 -n

      例:

      比较整数ab是否相等:if [ $a = $b ] (也可用eq

      判断整数a是否大于整数bif [ $a -gt $b ]

      比较字符串ab是否相等:if [ $a = $b ]

      判断字符串a是否为空:if [ -z $a ]

      判断整数变量a是否大于bif [ $a -gt $b ]

      注意:

      在“[”和“]”符号的左右都留有空格“=”左右都有空格

      • 判断

      -e 文件已经存在

      -f 文件是普通文件

      -s 文件大小不为零

      -d 文件是一个目录

      -r 文件对当前用户可以读取

      -w 文件对当前用户可以写入

      -x 文件对当前用户可以执行

      S5

      #!/bin/sh

      folder=/home

      [ -r "$folder" ] && echo "Can read $folder"

      [ -f "$folder" ] || echo "this is not file"

      • for循环

      for循环结构与C 语言中有所不同,在BASH for 环的基本结构是:

      for var in [list]

      do

      #code block

      done

      $var 是循环控制变量,[list]var 需要遍历的一个集合,do/done对包含了循环体,相当于C 语言中的一对大括号。另外如果dofor 被写在同一行,必须在do前面加上;”。如:

      for$varin [list];do

      S7:

      #!/bin/bash

      for day in Sun Mon Tue Wed Thu Fri Sat

      do

      echo $day

      done

      v如果列表被包含在一对双引号中,则被认为是一个元素,S8:

      #!/bin/bash

      for day in "Sun Mon Tue Wed Thu Fri Sat“

      do

      echo $day

      Done

      For循环(注意)

      上面的例子中,在for 所在那行,变量day 是没有加"$" 符号的,而在循环体内,echo所在行变量$day是必须加上"$" 符号的。

      • while循环

      while循环的基本结构是:

      while [ condition ]

      do

      #code block

      done

      until循环的基本结构是:

      until [ condition ]

      do

      #code block

      done

      whileuntil的区别在于while是为真时执行,until是为假时执行

      • Case语句

      BASH中的case 结构与C 语言中的switch 语句的功能比较类似,可以用于进行多项分支控制。

      case"$var"in

      condition1 )

      ;;

      condition2 )

      ;;

      *)

      default statments;;

      esac

      S12:

      #!/bin/bash

      echo "Hit a key, then hit return."

      read Keypress

      case "$Keypress" in

      [A-Z] ) echo " Uppercase letter";;

      [a-z] )  echo " Lowercase letter";;

      [0-9] )  echo "Digit";;

      * ) echo "Punctuation, whitespace, or other";;

      esac

      • 关于bash在控制台下的快捷键

      ctrl+u 删除光标以前的所有字符

      ctrl+d 删除光标以前的一个字符

      ctrl+k 删除光标以后的所有字符

      ctrl+h 删除光标以后的一个字符

      ctrl+t 调换光标前两个字符的次序

      ctrl+a 移动光标到最前面

      ctrl+e 移动光标到最后面

      ctrl+p 上一个命令

      ctrl+n 下一个命令

      ctrl+s 锁定输入

      ctrl+q 解除锁定

      ctrl+f 移动光标到后一个字符

      ctrl+b 移动光标到前一个字符

      ctrl+x 标记一个位置

      ctrl+c 清除当前的输入

       

  • 文章声明
  • 作者:Owen
  • 出处: http://www.cnblogs.com/owenyang
  • 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。该博客同步发在 HEXO-博客
  • 相关阅读:
    numpy
    shell进阶2
    python笔记3
    shell进阶1
    记录:Paxos原理、历程及实战
    收藏
    linux fs io
    linux mount 操作
    docker好文收藏
    rbd snap(1)
  • 原文地址:https://www.cnblogs.com/owenyang/p/3579131.html
  • Copyright © 2020-2023  润新知