• shell学习(一)


    shell是什么

    shell是一个命令解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell来启动、挂起、停止甚至是编写一些程序。

    shell变成快速入门

    1. 脚本以#!/bin/bash开头。
    2. 脚本需要有可执行权限。
    3. 编写一个hello world示例程序,命令行输入vim myShell.sh
        #!/bin/bash
        echo "hello world!"
        
    
    1. :wq保存退出。chmod +x myShell.sh赋予可执行权限,调用执行 ./myShell.sh(相对路径和绝对路径都可以执行)
    2. 方式二:如果不赋予可执行权限,调用shell脚本用sh ./myShell.sh来执行,不推荐这种方式。

    shell变量

    1. shell变量的定义,Linux shell变量分为两种,系统变量和自定义变量。

    变量规则:
        变量名称可以由字母,数字,下划线组成,但是数字不能开头;
        等号两侧不能有空格,否则会报错;
        变量名称一般习惯为大写。
    将命令的返回值赋值给变量:
        使用反引号``将命令括起来
            A=`1s-1a`反引号,运行里面的命令,并把结果返回给变量A;
            RESULT=`ls -l /home`
            echo $RESULT
        使用$()来执行也可以,推荐使用。
            A=$(1s-1a)等价于反引号
            MY_DATE=$(date)
            echo "date=$MY_DATE"
    系统变量:$HOME $PWD $SHELL $USER等等,使用方法:echo $HOME
        echo "PATH = $PATH"
        echo "USER= $USER"
    显示当前shell中所有变量:set
        set | more
    基本语法:
        (1)定义变量: 变量 = 值
            A=100
            echo "A=$A"
            输出结果 A=100
        (2)撤销变量:unset 变量
            unset A
            echo "A=$A"
            输出结果  A=   unset之后A的值没有了。
        (3)声明静态变量:readonly 变量,注意,不能unset
            readonly B=2
            echo "B=$B"
            unset B
            echo "B=$B"
            输出结果 第一行正常输出B=2,第二行报错,cannot unset :readonly variable 
             
    

    2. shell环境变量

       基本语法:
            (1)export 变量名=变量值(功能描述:将shell变量输出为环境变量)
            (2)source 配置文件,(功能描述:让修改后的配置信息立即生效)
            (3)echo $变量名(功能描述:查询环境变量的值)
            使用示例:vim /etc/profile
                JAVA_HOME=/usr/local/java
                export JAVA_HOME
                wq退出,然后source /etc/profile
                echo $JAVA_HOME打印Java安装路径。
            在另一个shell中使用我们自定义的环境变量:
            vim myShell.sh
            echo "javahome=$JAVA_HOME"
        多行注释:
            :<<!
            RESULT=`ls -l /home`
            echo $RESULT
            MY_DATE=$(date)
            echo "date=$MY_DATE"
            !
    

    3. 位置参数变量

        基本语法:
            (1)$n  功能描述:n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数需要用大括号抱起来${10}
            (2)$*  功能描述:这个变量代表命令行中所有的参数,$*把所有参数看作一个整体
            (3)$@  功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待
            (4)$#  功能描述:这个变量代表命令行中所有参数的个数
        位置参数变量应用实例:编写一个position.sh脚本,在脚本中获取到命令行的各个参数信息
            vim position.sh
            #!/bin/bash
            #获取到各个参数
            echo "$0 $1 $2"
            echo "$*"
            echo "$@"
            echo "参数个数=$#"
            执行 ./position.sh 30 60
            输出 
                ./position.sh 30 60
                30 60
                30 60
                参数个数=2
    

    4. 预定义变量

        基本介绍:
            就是shell设计者事先定义好的变量,可以直接在shell脚本中使用
        基本语法:
            (1)$$  功能描述:当前进程号的PID
           (2)$!  功能描述:后台运行的最后一个进程的进程号PID
           (3)$?  功能描述:最后一个执行的命令的返回状态。如果这一个变量的值为0,证明上一个命令正确执行;如果这个变量值非0(具体哪个数由命令自己来决定),则证明上一个命令执行不正确了。
        应用示例:
            vim perVar.sh
            #!/bin/bash
            echo "当前进程号=$$"
            #后台方式运行myShell.sh
            ./myShell.sh &
            echo "最后的进程号=$!"
            echo "执行的值=$?"
            :wq退出
            chmod 744
            执行预定义变量脚本  ./perVar.sh
    

    5. 运算符

        基本语法:
           (1) "$((运算式))"或者"$[运算式]"
           (2)expr m + n expr m - n expr \*乘以,/除以,%取余,注意expr和运算符以及变量之间都要有空格
            
        应用示例:
            #!/bin/bash
            #第一种方式$(())
            RESULT1=$(((2+3)*4))
            echo "result=$RESULT1"
            #第二种方式[],推荐使用
            RESULT2=$[(2+3)*4]
            echo "result2=$RESULT2"
            #第三种方式,exrp
            TEMP=`expr 2 + 3`
            RESULT3=`expr $TEMP \* 4`
            echo "result3=$RESULT3"
            #求出两个参数的和
            SUM=$[$1+$2]
            echo "sum=$SUM"        
    

    6. shell判断语句

        基本语法:
            [condition]注意 condition 前后要有空格
            #非空返回true,可使用$?验证(0为true,>1为false)
        应用示例:
            [alibaba]                             返回true
            []                                    返回false
            [condition]&&echo OK || echo notok    条件满足,执行后面的语句
        条件判断:
            (1)两个整数的比较: =字符串比较   -lt小于 -le小于等于  -eq等于  -gt大于  -ge大于等于  -ne不等于
            (2)按照文件权限判断: -r有读的权限    -w有写的权限    -x有执行的权限
            (3)按照文件类型进行判断: -f文件存在并且是一个常规的文件  -e文件存在   -d文件存在并且是一个目录
        应用示例:
            案例一: "ok"是否等于""ok"
            判断语句:if [ "ok" = "ok" ]
                     then
                        echo "equal"
                     fi   //结果相等
            案例二:23是否大于等于22
            判断语句:if [ 23 -gt 22 ]
                     then
                        echo "大于"
                     fi   //结果大于
            案例三:/root/install.log目录中的文件是否存在
            判断语句:if [ -e /root/aaa.log  ]
                     then
                        echo "存在"
                     fi   //结果存在
    

    7. 流程控制

        if控制:输入大于60,输出及格,小于60输出不及格。
                if [ $1 -ge 60  ]
                then
                    echo "及格"
                elif [ $1 -lt 60 ]
                then
                    echo "不及格"
                fi  
        case控制:当命令行参数是1时,输出周一,2输出周二, 其他输出other
                case $1 in
                "1")
                echo "周一"
                ;;
                "2")
                echo "周二"
                ;;
                "*")
                echo "other"
                ;;
                esac
        for循环:
            语法一:for 变量 in 值1 值2 值3···
                    do
                    程序
                    done
                    示例:打印命令行输入的参数(这里可以看出$*和$@的区别)
                    #使用$*
                    for i in "$*"
                    do
                        echo "the param is $i"
                    done 输出的参数是一个整体 the param is10 20 30,当成一个参数来输出。
                    #使用$@
                    for j in "$@"
                    do
                        echo "the param is $j"
                    done  输出的参数分别打印the param is10 the param is20 the param is30,当成多个参数来处理。
            语法二:for((初始值;循环控制条件;变量变化))
                    do
                    程序
                    done
                    示例:从1+到100的值输出显示
                    #定义一个变量
                    SUM=0
                    for((i=1;i<=100;i++))
                    do
                        SUM=$[$SUM+$i]
                    done
                    echo "sum=$SUM"
        while循环:命令行输入一个n,统计从1+..+n的值是多少
                    SUM=0
                    i=0
                    while [$i - le $1]
                    do
                        SUM=$[$SUM+$i]
                    done
                    echon "sum=$SUM"
            
    
  • 相关阅读:
    usaco-3.2-butter-passed
    usaco-3.2-msquare-pass
    usaco-3.2-ratios-pass
    usaco-3.2-spin-pass
    usaco-3.2-kimbits-pass
    usaco-3.2-fact4-pass
    usaco-3.1-stamps-pass
    usaco-3.1-contact-pass
    git操作
    spring 用到的设计模式
  • 原文地址:https://www.cnblogs.com/shaokai7878/p/16611679.html
Copyright © 2020-2023  润新知