zoukankan      html  css  js  c++  java
  • bash编程基础语法

    1.SHELL是什么?

    Shell是用户与内核进行交互操作的一种接口,目前最流行的Shell称为bash Shell

    Shell也是一门编程语言<解释型的编程语言>,即shell脚本

    一个系统可以存在多个shell,可以通过cat /etc/shells命令查看系统中安装的shell不同的shell可能支持的命令语法是不相同的

    Shell还是一个功能相当强大的编程语言,易编写、易调试、灵活性强。Shell是解释执行的脚本语言,所谓脚本语言就是不用编译就可以直接执行的语言。Shell中可以调用Linux系统命令。

    2 shell脚本的执行方式

    第一种:输入脚本的绝对路径或相对路径

    首先要赋予+x权限

      /root/helloWorld.sh

      ./helloWorld.sh

    或者,不用赋予+x权限,而用解释器解释执行u+x

    sh helloworld.sh

    第二种:bash或sh +脚本

      sh /root/helloWorld.sh

      sh helloWorld.sh

    第三种:在脚本的路径前再加". "

      . /root/helloWorld.sh

      . ./helloWorld.sh

    区别:第一种和第二种会新开一个bash,不同bash中的变量无法共享

    3.1 系统变量

    shell中的变量

    1)Linux Shell中的变量分为“系统变量”和“用户自定义变量”,可以通过set命令查看系统变量。用$输出变量

    2)系统变量:$HOME、

    $PWD、

    $SHELL、

    $USER等等 当前用户

    3)显示当前shell中所有变量:set

    3.2定义变量

    1)基本语法:

           变量=   TT=100    输出变量 echo  $TT

    2)变量定义规则

           1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头。

           2)等号两侧不能有空格

           3)变量名称一般习惯为大写

           4)双引号和单引号有区别,双引号仅将空格脱意(既字符串之间有空格时要加引号),单引号会将所有特殊字符脱意

           y=bb  echo 'hello $y'----------hello $y 单引号将所有的特殊字符都当做字符串使用,脱意

          echo "hello $y"---------------hello bb 

          字符串之间有空格时,要加引号。

          x=hello word  //报错,不能有空格,不用引号时。x="hello word",ok

    3)案例

    STR=“hello world”

    A=8               定义变量A

    unset A       撤销变量A

    readonly B=2  声明静态的变量B=2,不能unset

    export变量名  可把变量提升为全局环境变量,可供其他shell程序使用

    这也是环境变量要加export的原因,这样所有的用户都可以使用这个变量

    export JAVA_HOME=/opt/home/jdk-7.01

    export A=1 定义的变量,会对自己(当前用户)所在的shell进程及其子进程生效

    B=1 定义的变量,只对自己的所在的shell进程生效

    4.将命令的返回值赋值给变量(特别重要)

         •A=`ls -la` 反引号,运行里面的命令,并把结果返回给变量A

         •A=$(ls -la) 等价于反引号

               A=`pwd`  & echo $A    ----------/home/hello

               A=$(pwd)  $ echo $A------------/home/hello             

    •$? 表示上一个命令退出的状态

    •$$ 表示当前进程编号

    •$0 表示当前脚本名称

    •$n 表示n位置的输入参数(n代表数字,n>=1)

    •$# 表示参数的个数,常用于循环

    •$*和$@ 都表示参数列表

    •$* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号" "包含时,都以$1 $2 … $n 的形式输出所有参数

    •当它们被双引号" "包含时,"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数

    5.echo输出命令

           (1)基本语法:

                  echo [选项] [输出内容]

    选项:  echo  -e  支持反斜线控制的字符转换

    控制字符 

           

    输出本身

    输出警告音

    退格键,也就是向左删除键

    取消输出行末的换行符。和“-n”选项一致

    ESCAPE

    换页符

     

    换行符

     

    回车键

     

    制表符,也就是Tab

    垂直制表符

    nnn

    按照八进制ASCII码表输出字符。其中0为数字零,nnn是三位八进制数

    xhh

    按照十六进制ASCII码表输出字符。其中hh是两位十六进制数

    7. 设置环境变量

    1.基本语法:

            export 变量名=变量值         (功能描述:设置环境变量的值)

            echo $变量名                      (功能描述:查询环境变量的值)

            source配置文件                 (功能描述:让修改后的配置信息立即生效)

    2.位置参数变量

    1)基本语法

           $n    (功能描述:n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10}

           $*    (功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体)

           $@  (功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)

           $#    (功能描述:这个变量代表命令行中所有参数的个数)

    2)案例

           1)计算输入的参数1和参数2的两个数的和,并输出到控制台

    #!/bin/bash

    num1=$1

    num2=$2

    sum=$(( $num1 + $num2))

    #变量sum的和是num1num2

    echo $sum

    #打印变量sum的值

           2)打印输入的参数总数、所有参数

    #!/bin/bash

    echo "A total of $# parameters"

    #使用$#代表所有参数的个数

    echo "The parameters is: $*"

    #使用$*代表所有的参数

    echo "The parameters is: $@"

    #使用$@也代表所有参数

           3$*$@的区别

    #!/bin/bash

    for i in "$*"

    #$*中的所有参数看成是一个整体,所以这个for循环只会循环一次

            do

                    echo "The parameters is: $i"

            done

    x=1

    for y in "$@"

    #$@中的每个参数都看成是独立的,所以“$@”中有几个参数,就会循环几次

            do

                    echo "The parameter$x is: $y"

                    x=$(( $x +1 ))

            done

    a$*$@都表示传递给函数或脚本的所有参数,不被双引号“”包含时,都以$1 $2 …$n的形式输出所有参数

    b)当它们被双引号“”包含时,“$*”会将所有的参数作为一个整体,以“$1 $2 …$n”的形式输出所有参数;“$@”会将各个参数分开,以“$1” “$2”…”$n”的形式输出所有参数

    注意:脚本可以嵌套。

    9预定义变量

    1)基本语法:

           $ (功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)

          $$    (功能描述:当前进程的进程号(PID))

          $!     (功能描述:后台运行的最后一个进程的进程号(PID))

    2)案例

    #!/bin/bash

    #输出当前进程的PID,这个PID就是当前这个脚本执行时,生成的进程的PID

    echo "The current process is $$"

    #使用find命令在root目录下查找hello.sh文件,符号&的意思是把命令放入后台执行

    find /root -name hello.sh &

    echo "The last one Daemon process is $!"

    echo "$?"

    10.1运算符

    1)基本语法:

    1$((运算式))”或“$[运算式]

    2expr m + n

    注意expr运算符间要有空格

    2)案例:计算(2+3X4的值

           1)采用$[运算式]方式

           [root@hadoop102 datas]# S=$[(2+3)*4]

          [root@hadoop102 datas]# echo $S

           2expr分布计算

                  S=`expr 2 + 3`

                  expr $S * 4

           3expr一步完成计算

                  expr `expr 2 + 3` * 4

                  echo `expr \`expr 2 + 3\`*4`

    10.2 条件判断

     判断语句

    1)基本语法:

    [ condition ]注意condition前后要有空格

    #非空返回true,可使用$?验证(0true>1false

    2)案例:

    [robot]        返回true

    []                   返回false

    [condition] && echo OK || echo notok                      条件满足,执行后面的语句

    10.3 常用判断条件

    1)两个整数之间比较

    = 字符串比较

    -lt 小于

    -le 小于等于

    -eq 等于

    -gt 大于

    -ge 大于等于

    -ne 不等于

    2)按照文件权限进行判断

    -r 有读的权限

    -w 有写的权限

    -x 有执行的权限

    3)按照文件类型进行判断

    -f 文件存在并且是一个常规的文件

    -e 文件存在

    -d 文件存在并是一个目录

    4)案例

    [root@localhost ~]# [ 23 -ge 22 ]
    [root@localhost ~]# [ -w student.txt ]
    [root@localhost ~]# [ -e /root/install.log ]
     
    10.4.循环控制 
    if判断
     
    1)基本语法:
     
    if [ 条件判断式 ];then
     
      程序
    fi
    或者
    if [ 条件判断式 ]
      then
        程序
    fi
     
           注意事项:(1)[ 条件判断式 ],中括号和条件判断式之间必须有空格
     
    2)案例
    #!/bin/bash
    read –p “please input your name:” NAME
    #printf ‘%s
    ’ $NAME
    if[ $NAME = root ]
    then
        echo “hello ${NAME}, welcome !”
    elif [ $NAME = robot]
        then
            echo “hello ${NAME}, welcome !”
    else
        echo “sorry ”
    fi
    ------------------------------------------------------------------------------
    #!/bin/bash
    read -p "please input your name:" NAME
    #printf'%s
    ' $NAME
    if [ $NAME = root ]
            then
                    echo "hello ${NAME},  welcome !"
            elif [ $NAME = itcast ]
                    then
                            echo "hello ${NAME},  welcome !"
           else
                    echo "SB, get out here !"
    fi
    

      

    10.6.2 case语句

    1)基本语法:

    case $变量名 in

      "1"

        如果变量的值等于值1,则执行程序1

        ;;

      "2"

        如果变量的值等于值2,则执行程序2

        ;;

      …省略其他分支…

      *

        如果变量的值都不是以上的值,则执行此程序

        ;;

    esac

    2)案例

    case $1 in

    start)

      echo “starting”

      ;; 两个分号结束

    stop)

      echo “stoping”

      ;;

    *) *是通用的通配符

      echo “Usage:{start|stop}”

    esac

    10.6.3 for循环

    第一种:
    for N in 1 2 3
    do
      echo $N
    done
    或
    for N in 1 2 3; do echo $N; done
    或
    for N in {1..3}; do echo $N; done
     
    第二种:
    for ((i = 0; i <= 5; i++))
    do
      echo "welcome $i times"
    done
    或
    for ((i = 0; i <= 5; i++)); do echo "welcome $i times"; done
    

      

    2)案例:

           1)打印时间

    #!/bin/bash

    #打印时间

    for time in morning noon afternoon evening

            do

                    echo "This time is $time!"

            done

    3)基本语法2

           for (( 初始值;循环控制条件;变量变化 ))

      do

        程序

      done

    4)案例

    1)从1加到100

    #!/bin/bash

    #1加到100

    s=0

    for (( i=1;i<=100;i=i+1 ))

            do

                    s=$(( $s+$i ))

            done

    echo "The sum is : $s"

    10.6.4 while循环

    1)基本语法:

    while [ 条件判断式 ]   条件判断式都要两边加空格

      do

        程序

      done

    2)案例

           1)从1加到100

    #!/bin/bash

    #1加到100

    i=1

    s=0

    while [ $i -le 100 ]

    #如果变量i的值小于等于100,则执行循环

            do

                    s=$(( $s+$i ))

                    i=$(( $i+1 ))

            done

    echo "The sum is: $s"

    第二种

      i=1

      s=0

    while ((i<=100))

    do

      s=$(($i+$s))

      let i++

    done

    echo $s10.7 read读取控制台输入

    1)基本语法:

           read(选项)(参数)

           选项:

    -p:指定读取值时的提示符;

    -t:指定读取值时等待的时间(秒)。

    参数       

           变量:指定读取值的变量名

    2)案例

    [robot@hadoop101 etc]$ read -p "please input your name:" NAME

    please input your name:lilei

    [robot@hadoop101 etc]$ echo $NAME

    lilei


    ————————————————


    版权声明:本文为CSDN博主「涤生手记」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/qq_26442553/java/article/details/92585942

  • 相关阅读:
    Python Django :HTTP生命周期
    Docker简介及Centos 7 安装[初步配置]
    python:Django 简介。
    python :Django url /views /Template 文件介绍
    python:异常处理及程序调试
    python之正则表达式【re】
    Day 21 python :面向对象 类的相关内置函数 /单例模式 /描述符
    Day 22: 软件开发目录设计规范
    Day 20: 面向对象【多态,封装,反射】字符串模块导入/内置attr /包装 /授权
    SpringCloud教程 | 第九篇: 服务链路追踪(Spring Cloud Sleuth)
  • 原文地址:https://www.cnblogs.com/presleyren/p/12692260.html
Copyright © 2011-2022 走看看