zoukankan      html  css  js  c++  java
  • Linux Shell编程基础

    Linux中,所有命令都是小写(惯例),所以,建议环境变量都是大写。
    set可以查看所有变量,env可以查看环境变量。

    后台运行:命令末尾加上 &

    Shell编程:

    1. 所有变量默认都是字符串,如变量值带有空格,应使用双引号括起来(不能单引号)。注意,变量赋值=两边不能有空格,否则会被当成命令。
    2. 调用变量时,需要使用$前缀。--类似PHP,但定义时不需要。
    3. 重用变量时,如变量x调用自身:$x="$x"abc,或者$x=${x}abc。
    4. 用户自定义的变量仅在当前shell有效。
    5. export x=abc,可以将x=abc作为环境变量。 -- 本质上是declare
    6. unset x,可以删除变量x,无论是环境变量还是自定义变量。
    7. 输入set -u之后,会提示被调用的变量是否绑定。

    语系 locale
    修改语系,还要考虑字体。临时修改语系:修改LANG环境变量即可。

    注意,环境变量其实都是启动时读取的文件,从中获取的设置。所以,直接修改环境变量中的值,仅当前有效,重启后还原。

    -----------------------------
    位置变量(不适合第三方用户使用,第三方建议使用read):

    1. $n${n},其中 $0 代表当前的命令,其他的代表参数。
    2. $* 代表参数整体 -- 需要使用"$*" -- 双引号,否则意义不同
    3. $@ 代表所有参数 -- 需要使用"$@" -- 双引号
    4. $# 代表参数个数
    5. $?,代表上一个命令的返回值,如果正确执行了,返回0,否则返回非0。--非0返回值由命令决定。
          ls && echo  当第一条命令正确执行后,再执行第二条 -- 判断的就是返回值。
          ls || echo    当第一条命令失败后,再执行第二条。
    6. $$,当前进程pid。
    7. $!,后台运行的最后一个进程的pid。   

    -----------------------------
    read -p "enter: " name

    echo $name
    -----------------------------时限
    read -p "enter: " -t 30 name

    echo $name
    -----------------------------不显示
    read -p "enter: " -t 30 -s pwd

    echo $pwd
    -----------------------------限制个数
    read -p "enter [m/f]: " -t 30 -n 1 sex

    echo $sex

    -----------------------------------------------
    shell运算符:

    declare -a/i/p/r/x VAR    转型a数组/i整数/p显示/r只读/x环境变量

    export本质上也是调用了declare -x VAR。

    declare -p 可以列出所有的变量。

    declare +a/i/p/x VAR 取消。注意 r无效,务必注意。

    数值运算,除了declare -i之外:

    ① expr 或 let
    dd=$(expr $aa + $bb)   注意空格必需。
        aa=11
        bb=555
        cc=$(expr $aa + $bb)
       
    ② $((运算式))或$[运算式]     


    -----------------------------------------------
    环境变量配置文件 -- 源自一切皆文件。

    source 或 . ,刷新配置文件。
       
    -----------------------------------------------

    通配符与正则

    通配符:? * []

    通配符是完全匹配,正则不是。

    操作文件的命令,只能识别通配符。find ls等

    正则是用于处理数据的。 grep awk sed等

    不要使用 "a*",因为*代表0或任意个数,这样意味着任意行都符合。

    grep "aa*" test.txt

    .    匹配除了换行符之外的一个任意字符
        grep -n "s.d" test.txt
        grep "s..d" test.txt
        grep "s.*d" test.txt
        grep ".*" test.txt        //类似"a*",但是"a*"会有问题

    ^    行首或取反,同Java

    $    行尾
        grep -n "^$" abc

    []    同Java

    转义:. { } 转成本义

    {n}

    {n,}

    {n,m}

       
    grep -v "root" test.txt        不含有"root"的行


    cut,列提前
        cut -f n test.txt           n为列,默认分隔符为制表符
        cut -f a,b,c -d "" test.txt     自定义分隔符delimiter

  • 相关阅读:
    JS jQuery显示隐藏div的几种方法
    PHP 二维数组去重(保留指定键值的同时去除重复的项)
    Java面试题解析(一)
    Java :面向对象
    使用 Spring Framework 时常犯的十大错误
    Spring Boot 面试的十个问题
    《深入理解 Java 内存模型》读书笔记
    Spring Boot 2.0 迁移指南
    MaidSafe区块链项目白皮书解读
    20190712共学问题归纳
  • 原文地址:https://www.cnblogs.com/larryzeal/p/6133833.html
Copyright © 2011-2022 走看看