zoukankan      html  css  js  c++  java
  • 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
    
  • 相关阅读:
    selenium1-安装
    jmeter9-图形监控
    InetAddress.getLocalHost().getHostAddress() 在macOS里面反应很慢
    自定义实现简易定时任务
    Redis性能监控
    Linux启动进程、线程数量查看及修改方式
    jmeter处理request和response
    centos安装netdata
    scp使用expect自动输入密码
    Linux系统下生成TPS,ResponseTime曲线图
  • 原文地址:https://www.cnblogs.com/zx125/p/12189675.html
Copyright © 2011-2022 走看看