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

原文地址:https://www.cnblogs.com/larryzeal/p/6133833.html