您的位置:首页 > 运维架构 > Shell

Linux Shell编程基础

2016-12-05 14:32 323 查看
Linux中,所有命令都是小写(惯例),所以,建议环境变量都是大写。
set可以查看所有变量,env可以查看环境变量。

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

Shell编程:

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

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

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

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

$n${n},其中 $0 代表当前的命令,其他的代表参数。
$* 代表参数整体 -- 需要使用"$*" -- 双引号,否则意义不同
$@ 代表所有参数 -- 需要使用"$@" -- 双引号
$# 代表参数个数
$?,代表上一个命令的返回值,如果正确执行了,返回0,否则返回非0。--非0返回值由命令决定。
ls && echo 当第一条命令正确执行后,再执行第二条 -- 判断的就是返回值。
ls || echo 当第一条命令失败后,再执行第二条。
$$,当前进程pid。
$!,后台运行的最后一个进程的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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: