shell变量

shell执行

#!/bin/bash    #shebang指定解释器

执行方式

lang@liang:~/linux/shell$ chmod u+x test.sh
lang@liang:~/linux/shell$ ./test.sh

lang@liang:~/linux/shell$ /bin/bash ./test.sh

lang@liang:~/linux/shell$ . ./test.sh

lang@liang:~/linux/shell$ source ./test.sh

对比,前两种方式执行方式实质一样,后两种实质相同

shell执行过程解释:

lang@liang:~/linux/shell$ ls

1.当前shell   fork产生子进程,子进程exec执行ls.

2.父进程(shell) wait等待子进程执行ls(exec)

3.子进程运行成功或者终止,父进程恢复运行.

对于后两种方式   .   ./ls      source ls

父进程直接在当前shell下执行命令,然后返回

其他问题:

将命令用(),引起来,那么shell 会直接fork出子shell来执行()中的命令.且可以多个命令;分割.

cd .. ; ls -l

特别强调

因为shell默认执行是fork--exec执行命令.

那么,我们在脚本中的cd .. 等改变状态的命令影响的只是子进程环境,并不改变父进程.

此时,如果有需求,那么.可以以  source执行  脚本

shell变量

命令

env

set

printenv

打印当前环境变量.

本地变量,只存在于当前shell,set命令显示当前shell定义的所有变量(本地变量以及环境变量)

shell中定义本地变量

VARNAME=value

export VARNAME  将本地变量导出为环境变量

unset VARNAME 删除本地变量或者环境变量

变量引用

shell变量都是字符串.对变量的引用使用$符号.

字符串拼接能力

lang@liang:~/linux/shell$ echo $SHELL

/bin/bash

lang@liang:~/linux/shell$ echo $SHELLaaa

lang@liang:~/linux/shell$ echo ${SHELL}aaa

/bin/bashaaa

变量名代换*  ? []

通配符 * :匹配0或多个任意字符

?:匹配一个任意字符

[若干字符]:匹配[]中的任意一个字符的一次出现

命令带换: `  或者 $()

lang@liang:~/linux/shell$ DATE=`date`

lang@liang:~/linux/shell$ echo $DATE

2016年 08月 15日 星期一 19:29:23 CST

lang@liang:~/linux/shell$ DATE=$(date)

lang@liang:~/linux/shell$ echo $DATE

2016年 08月 15日 星期一 19:30:20 CST

转义字符

lang@liang:~/linux/shell$ touch \$\ \$

lang@liang:~/linux/shell$ ll

-rw-rw-r-- 1 lang lang    0 8月  15 19:32 $ $

创建文件名 以 -  开头时可以如下处理

lang@liang:~/linux/shell$ touch ./-hell

lang@liang:~/linux/shell$ ll ./-hell

-rw-rw-r-- 1 lang lang 0 8月  15 19:32 ./-hell

lang@liang:~/linux/shell$ touch -- -lll

lang@liang:~/linux/shell$ ll

-rw-rw-r-- 1 lang lang    0 8月  15 19:35 -lll

单引号

shell脚本中单引号都可以界定字符串.而非字符,shell中单引号内的所有字符保持字面值.

双引号

双引号用于保持引号内suuoyou字符的字面值.(回车也不例外).除了以下

$变量值

``仍然表示命令替换

\$表示$的字面值

\代表转义.

你可能感兴趣的:(shell变量)