zoukankan      html  css  js  c++  java
  • linux shell 总结

    1、#!指定执行脚本的shell 如果不写的话,用系统默认的shell  s shell是所有linux ,unix都支持的
    
    2、#开始的行表示注释(不限于行首)
    命令建议写绝对路径
    执行:
    ./example.sh
    sh example.sh
    
    date +%F
    
    临时变量:shell内部定义的,范围程序本身
    永久变量:环境变量  
    
    $PATH :默认搜索路径,环境变量
    $LANG 当前支持的语言环境
    $SHELL 当前shell
    $PS1
    变量以字母和下划线开头,区分大小写,一般都为大写
    注意:变量赋值时等号两边没有空格
    
    TIME=$(data+%F) <==> TIME=`data+%F)`
    
    当字符串中间有空格时需要用引号引起来,没有则可以不用引
    
    echo NAME = 'songjiankang'
    双引号中变量的值会解析,单引号中的则不会
    
    set 查看环境变量和自定义变量
    删除变量:unset NAME
    
    变量只有在使用的时候才会加 "$"
    
    特殊的变量:
    位置变量 命令$0,  后面$1~9 是在脚本执行的时候后面传进去的
    
    echo $?  如果为0执行成功,如果非0,有问题  (上一个命令执行的返回值)
    $*  这个程序的所有参数
    $#    这个程序的参数个数
    $$    执行这个脚本程序的PID
    $! 执行上一个后台命令的PID
    $?    执行上一个命令的返回值
    
    注意:这些变量都是在脚本中用的
    
    $# is : 2
    $* is : a b
    $? is : 0
    $$ is : 3765
    $0 is : demo.sh
    
    把需要执行的放到shell脚本中,然后计划任务去执行脚本
    
    read  从键盘读入数据,赋值给变量
    
    脚本测试:
    read one two three #一个变量名或多个变量名
    echo 'first--'$one
    echo 'two  --'$two
    echo 'three--'$three
    
    sh -x read.sh 调试 显示代码执行的过程 
    sh -n read.sh 检测语法错误
    
    如果参数过少,后面的参数接到的空,如果输入的参数过多,会把多余的参数都放到最后一个参数里
    
    变量的算数运算 expr 对整数进行运算,舍去法取整  
    注意: expr 3 + 8 运算符两边是有空格的
    注意乘号需要转义  expr 2 * 3
    var7=expr `expr 9 + 5`/$var4  
        
    
    变量参数语句:参数变量是否相等,是否为空,文件类型
    test str1 = str2  #注意两边有空格
    test str1 != str2
    
    if [测试语句 ]; then  #注意 [] 两边必须有空格 ,then 如果和if在一行必须加分号
        [code]
    else
        [code]
    fi
    ______________________________________________
    
    if [测试] 
        then
        [code]
    elif []
        then
        [code]
    else
        [code]
    fi
    
    exit 0  //退出脚本  0 表示正常退出,非0表示非常出退出
    
    ————————————————————————————————————————————————————————
    
    for 变量 in 名字表
    do 
        命令列表
    done
    
    awk:信息分段提取命令
        #查找是root的用户
        awk -F : '$3==0 {print $1}' /etc/passwd 
        #查找密码为空的用户
        awk -F : 'length($2)==0 {print $1}' /etc/passwd 
    grep  如果找不到的话会返回非零值
    _______________________________________________________
     
    select 变量 in 名字表 #没有break则会一直循环
    do 
        命令列表
        break
    done
    
    ________________________________________________________
    
    op=$1
    case "$op" in#引号可有可无
            stop)     #引号可有可无
                    echo "stop"
                    ;;
            restart)
                    echo restat
                    ;;
            *)
                    echo "usage:sdf"
    esac
    ——————————————————————————————————————————————————————
    echo 123456 passwd --stdin mysql 
    
    shift:参数左移
    
    函数增加了代码的可能性
    
    脚本可以让用户执行:
    sh方式: 
    1、对脚本有r权限
    2、对脚本所在目录有rx权限
    
    直接执行脚本方式: 
    1、对脚本有rx权限
    2、对脚本所在目录有rx权限
    
    ———————————————————————————————————————————————————————
    检测nginx是否运行
    web=`pgrep nginx`
    if [ "$web" = "" ]
    then
            echo "nginx is not running"
    else
            echo "nginx is running。。。。"
    fi
    _____________________________________________________________________________________________________
    
    histor -c    清除历史
    !命令  执行离最近的那条以命令开头的命令
    set 查看所有变量
    env 查看全局变量
    echo "aaa${a}aaaaa"
    export 变量名 #使其成为全局的
    find /  搜索全部文件
     
     for循环
    for((i=0;i<19;i++))
    do
            echo $i
    done
    
    let i++ 只能递增1
    
    ______________________________________
    
    ll &>error.txt 错误和正确都输出到里
    
    ~/.bashrc: 存放别名记录
    ~/.bash_history  存放历史记录
    
    !ps #执行最近一次的以ps开头的命令
    修改 history 记录历史的长度:/etc/profile 中 HISTSIZE=1000 参数
    
    abc${song}def    #包含变量名
    
    export varname #把一个局部变量提升为一个全局变量
    
    cat <<end
    s
    j
    k
    end
    
    环境变量
        全局:/etc/profile
        局部:~/.bash_profile
        
    常见的环境变量:
        $USER, $LOGNAME
        $UID, $SHELL, $HOME, 
        $PWD, $PATH
        $PS1:[u@h W]$
        $PS2:敲错以后进入的符号
    
    chmod a+x 文件名 三个用户都增加执行权限
    
    [ -d /etc/init.d/ ] && echo "yes"
    echo $?
    
    dfnum=df -hT |awk 'NR==4{print int($5)}' #打印第五行第四列
    [ $dfnum -lq 20 ]&& echo "yes"
     
    read -p "please intpu you name :" name    #输入的内容会被name获取到
    
    service mysqld status &>/dev/null
    echo $? #判断是否启动,返回值在mysqld中
    
    
    for((i=0;i<5;i++))
    do
            echo $i
            sleep 1
    done
    
    #纯数学运算的简写
    let i++
    i=$(($i+2)) 
    
    函数名 参数1 参数2 。。。。
    
    add(){
       echo $1
       echo $2
    }
    
    add 1 2
    add 2 3
    
    man test 查看test测试的用法
  • 相关阅读:
    行锁原理 天高地厚
    unity c#
    (转)C#导出Excel源码
    c#.net]做tooltip给控件动态添加属性的做法、IExtenderProvider接口的使用
    自定义提供程序控件
    在C#中使用SQLite
    哈佛大学凌晨4点半的景象
    (转)SQLServer常见查询问题
    .NET组件编程
    窗体着色
  • 原文地址:https://www.cnblogs.com/siqi/p/3609018.html
Copyright © 2011-2022 走看看