• bash shell


    bash的配置文件:

    全局配置

    /etc/profile , /etc/profile.d/*.sh , /etc/bashrc

    个人配置

    `/.bash_profile , `/.bashrc

    profile类的文件:
      设定环境变量
      运行命令或脚本

    bashrc类的文件 :
      设定本地变量
      定义命令别名

    登录式shell如何读取配置文件?

    /etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc

    非登录式shell如何配置文件?

    ./.bashrc --> /etc/basrc --> /etc/profile.d/*.sh

    bash支持的引号:

    `` 或$():命令替换

    touch `date +%y%m%d`.log 或 touch $(date +%y%m%d).log

    "":弱引用,可以实现变量替换
    '':强引用,不完成变量替换

    变量名称:

    1. 只能包含字母,数字和下划线。并且不能数字开头:
    2. 不应该跟系统中已有的环境变量重名:
    3. 最好做到见名知义:

    bash变量类型:

    定义变量:set varname=jerry # set可以省略 ,等号左右不能留空格
    环境变量:export varname=jerry # 作用域为当前shell进程及其子进程;
    本地变量:varname=jerry # 作用域为整个bash进程
    局部变量:local varname=jerry # 作用域为当前代码段
    位置变量:$1,$2, # 引用脚本参数

    ./a.sh 1 2 # a.sh是$0,1时$1 , 2时$2 
      shift    #


    特殊变量:$? # 保存上一个命令的执行状态返回值:

    程序执行,可能有两类返回值
      echo $? # 程序状态返回代码(0-255)
        0:正确执行
        1-255:错误执行
      $#    # 输入参数的个数
      $*    # 参数列表
      $@    # 参数列表

    引用变量:${name} # {}有时可以省略
    撤销变量:unset varname
    查看当前shell中的变量: set
    查看当前shell中的环境变量:printenv、env、export

    数值变量:

    let:数值
      declare -i:表示整形
      declare -x:将一个变量声明成环境变量

    shell脚本第一行:#!/bin/bash

    条件判断类型

    条件测试类型:
      整数测试
      字符测试
      文件测试

    1、条件测试表达式:中括号必须加空格。

    [ expression ]  括号两端必须要有空格
    [[ expression ]] 括号两端必须要有空格
    test expression
    
    组合测试条件
        -a:and
        -o:or
        !:取非

    2、字符串比较

    ==:测试是否相等,相等为真,不等为假
    !=:测试是否不等,不等为真,相等为假
    >:字符串大于为真,小于为假
    <:字符串小于为真,大于为假
    >=
    <=
    -n:测试指定字符串是否为空,空则真,不空则假
        -n string
    -s:测试指定字符串是否不空,不空为真,空为假
        -s string

    3、整数比较:

    -eq:测试两个整数是否相等:比如 [ $a -eq $b ]
    -ne:测试两个整数是否不等:不等,为真:相等,为假:
    -gt:测试一个数是否大于另一个数:大于,为真:小于,为假:
    -lt:测试一个数是否小于另一个数:小于,为真:大于,为假:
    -ge:大于或等于
    -le:小于或等于

    4、文件测试:

    -z string 测试指定字符是否为空,空着真,非空为假
    -n string 测试指定字符串是否为不空,空为假 非空为真
    -e FILE 测试文件是否存在
    -f file 测试文件是否为普通文件
    -d file 测试指定路径是否为目录
    -r file 测试文件对当前用户是否可读
    -w file 测试文件对当前用户是否可写
    -x file 测试文件对当前用户是都可执行
    -z 是否为空 为空则为真
    -a 是否不空

    5、条件测试的写法:

    1、执行一个命令的结果
    if grep -q "rm" fs.sh;then
    
    2、传回一个命令执行结果的相反值
    if !grep -q "rm" fs.sh;then
    
    3、使用复合命令((算式))
    if ((a>b));then
    
    4、使用bash关键字 [[判断式]]
    if [[ str > xyz ]];then
    
    5、使用内置命令:test 判断式
    if test "str" > "xyz";then
    
    6、使用内置命令:[判断式] 类似test
    if [ "str" > "xyz" ];then
    
    7、使用-a -o进行逻辑组合
    [ -r filename -a -x filename ]
    
    8、命令&&命令
    if grep -q "rm" fn.sh && [ $a -lt 100 ];then
    
    9、命令||命令
    if grep -q "rm" fn.sh || [ $a -lt 100 ];then

    shell中如何进行算术运算:

    1. let 算术运算表达式
        a=3 b=4  let c=$a+$b  echo $c
    2. $[算术运算表达式]
        c=$[$a+$b]
    3. $((算术运算表达式))
        c=$(($a+$b))
    4. expr 算术运算表达式,表达式中各操作数及运算符之间要有空格,而且要使用命令引用
        c=`expr $a + $b`

    命令间的逻辑关系:

    逻辑与:&&
      第一个条件为假时,第二个条件不再判断
      第一个条件为真时,第二个条件必须判断
    逻辑或:||

    read命令

    read -p "aaaaa:" cc # 人机交互,cc变量接收输入的字符串

    if语句

    单分支if语句:

    if [ 判断条件 ];then
    statement1
    ...
    fi

    双分支if语句:

    if [ 判断条件 ];then
    statement1
    ...
    else
    statement1
    ...
    fi

    多分支if语句:

    if [ 判断条件 ];then
    statement1
    ...
    elif [ 判断条件 ];then
    statement1
    ...
    else
    statement1
    ...
    fi
    exit:退出脚本

    测试脚本是否有语法错误: 

    bash -n 脚本
    bash -x 脚本:单步执行

    循环

    break:退出循环
    continue:结束当前循环
    seq:生成列表

    seq 起始数 结束数
    seq 起始数 步进长度 结束数
    例子:
      for i in `seq 1 10`;do echo $1 done
      for i in `seq 1 2 10`;do echo $1 done 

    for循环:

    例1:
        for i in {1..10};do
            echo $i
        done
    例2:
        for i in `seq 1 10`;do
            echo $i
        done
    例3:
        for (( i=1;i<10;i++ ))
            do
                echo $i
            done

    while循环:

    例1:
        aa=True
        let mun=0
        while $aa;do 
            if [ $mun -lt 10 ];then
                echo $mun
            else
                aa=False
            fi
            let mun+=1
        done 
    例2: 给while循环传入一个文件,read读取每一行传入LINE变量里
        while read LINE;do 
            echo $LINE
        done  < /PATH/TO/SOMEFILE
  • 相关阅读:
    JAVA中对Cookie的操作
    springboot 快速开发的定制补充
    centos7 安装 mysql5.7 版本(全)
    springboot redis-cache 自动刷新缓存
    spring-data-redis-cache 使用及源码走读
    Redis 相关功能和实用命令(五)
    Redis 集群(三)
    Redis 主从,哨兵,集群实战(四)
    redis 主从复制和哨兵模式(二)
    导出 mysql 数据到 redis
  • 原文地址:https://www.cnblogs.com/smile1/p/12005397.html
Copyright © 2020-2023  润新知