• shell


    shell编程

    shell

    是一个命令解释器,它为用户提供了一个向Linux内核发送请求以便于运行程序的系统程序

    shell的三种运行方式

    代码

    #!/bin/bash
    
    echo "hello world"
    
    #需要用户对该文件有运行的权限
    ./hello.sh
    
    bash hello.sh
    
    #直接调用解释器执行
    sh hello.sh
    

    注释

    #单行
    #
    
    #多行注释
    :<<!
    内容
    !
    

    变量

    系统变量

    #系统变量:
    $PATH 系统环境变量
    $HOME 用户目录位置
    $PWD 当前路径
    $SHELL 解释器目录
    $USER 用户
    
    #显示当前shell中所有的变量:set
    

    自定义变量

    #定义变量,注意不能用空格,打印变量需要加$
    a="zx"
    echo $a
    
    #撤销变量
    unset zx
    
    #声明静态变量
    b="wl"
    readonly b
    或者
    readonly c="zx125"
    

    将命令的返回值赋值给变量

    #加反引号
    A=`ls -a`
    
    #$()
    A=$(ls -a)
    

    添加环境变量

    1.在shell脚本编写 export 变量名=变量值
    2.source 脚本
    3.echo $全局变量
    

    脚本传参

    $n (功能描述:n 为数字,$0 代表命令本身,$1-$9 代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10})
    
    
    $* (功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体)
    
    
    $@  (功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)
    
    
    $#(功能描述:这个变量代表命令行中所有参数的个数)
    

    运算符

    1.$((运算式))
    2.$[运算式]
    
    #每一个参数和运算符都需要加空格
    3.`expr m + n`
    
    #常用运算符
    	+
    	-
    	/
    	%
    	*
    	(	)
    

    判断条件

    [ 条件 ]			注意:条件前后要有空格
    
    特别的:
    [ 非空 ]	  为true
    []		   为false
    [ haha ] && echo true || echo false
    

    字符串比较

    =	判等
    !=  判不相等
    
    #注意空格
    [ "ok" = "ok" ]&&echo true || echo false
    

    整数比较

    -lt		小于
    -le		小于等于
    -gt		大于
    -ge		大于等于
    -eg		等于
    -ne		不等于
    
    [ 23 -lt 30 ]&&echo true || echo false
    

    文件权限

    -r	有读的权限	[ -r 文件 ]
    -w	有写的权限
    -x	有执行权限
    
    [ -r /home/zx ]&& echo true || echo false
    

    文件类型判断

    -f 存在并且是一般文件	[-f 文件]
    -e 文件存在
    -d 存在并且是一个目录
    
    [ -f /home/zx ]&& echo true || echo false
    

    流程控制

    if

    if [ 条件 ]
    then
    	代码
    fi
    
    if [ 条件 ]
    then
    	代码
    else
    	代码
    fi
    
    if [ 条件 ]
    then
    	代码
    elif [ 条件 ]
    then
    	代码
    else
    	代码
    fi
    
    

    实例

    if [ $1 -gt 69 ]
    then
            echo "pass"
    else
            echo "no"
    fi
    
    

    case

    case $变量名 in
    '值1')
    代码
    ;;
    '值2')
    代码
    ;;
    *)
    代码					都没命中执行
    ;;
    esac
    
    #!/bin/bash
    
    case $1 in
    "1")
    echo 1
    ;;
    "2")
    echo 2
    ;;
    *)
    echo "no"
    ;;
    esac
    

    循环

    for

    for 变量 in 值1 值2 值3
    do
    	代码
    done
    
    #!/bin/bash 
    for i in "$*"
    do
            echo "$i"
    done
    
    for a in "$@"
    do
            echo "$a"
    done
    
    

    for2

    for {{初始值;循环条件;变量变化}}
    do
    	代码
    done
    
    res=0
    for((i=1;i<=100;i++))
    do
    	res=$[$res+$i]
    done
    echo "$res"
    

    while

    while [ 条件 ]
    do
    	代码
    done
    
    i=1
    res=0
    while[ $i -le $1 ]
    do 
    	res=$[$res+$i]
    	i=$[$i+1]
    done
    echo "res"
    

    交互

    read 选项 变量
    选项:
    -p:提示信息
    -t:等待输入的时间
    
    #!/bin/bash
    
    read -p "请在三秒内输入参数:" -t 3 name
    echo $name
    

    函数

    系统函数

    其实我们敲的命令基本都是系统函数

    basename

    basename [pathname] [suffix]
    获得路径最后一部分
    
    如果指定的suffix,那么会去掉结果中suffix的部分
    
    basename /home/root/zx.sh
    zx.sh
    
    basename /home/root/zx.sh .sh
    zx
    

    dirname

    dirname [pathname]
    获得基础路径
    
    dirname /home/zx/zx/zx
    /home/zx/zx
    

    自定义函数

    function 函数名(){
    	代码;
    	#参数使用:$1,$2,...,${10}...
    	return xxx;
    }
    
    调用:
    函数名 值1 值2
    
    
    #!/bin/bash
    
    function text(){
            res=$[$1+$2]
            echo $res
            return 1
    }
    
    res=`text 120 111`
    echo "$?"
    echo "$res"
    
    #$?表示函数的运行状态 0-255
    1
    231
    
  • 相关阅读:
    2021.1.28 个人rating赛补题报告
    2021.1.23 个人rating赛补题报告
    2021.1.23 个人rating赛补题报告
    2020.12.14 个人训练赛补题报告
    2020.11.28 2020团体程序设计天梯赛补题报告
    2020.12.3 Codeforces Beta Round #73(Div2)补题报告
    Xhorse VVDI Prog V5.0.6 is Ready for BCM2 Adapter
    Program 2021 Ford Bronco All Keys Lost using VVDI Key Tool Plus
    Xhorse VVDI Prog V5.0.4 Software Update in July 2021
    How to use Xhorse VVDI2 to Exchange BMW FEM/BDC Module?
  • 原文地址:https://www.cnblogs.com/zx125/p/12189675.html
Copyright © 2020-2023  润新知