shell learn
====================================================
1. 用户可以使用stty命令来识别哪个键执行哪个功能。输入
$ stty -a
可以看到如下信息:
cjash@linux-sdik:Desktop\> stty -a
speed 38400 baud; rows 22; columns 113; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?; swtch = M-^?; start = ^Q;
stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread -clocal -crtscts
-ignbrk brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc ixany imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke
cjash@linux-sdik:Desktop\>
====================================================
2. bg, fg, C-Z 的关系
bg 使挂起在后台的任务继续运行
fg 使后台的挂起的或在后台运行的任务置为前台运行
C-z 使前台的工作置于后台并挂起
====================================================
3. nohup 命令的使用(使后台进程持续运行,把nohup命令加到实际要运行命令的前面)
for example:
$ nohup ls &
====================================================
4. wait command(等待后台进程结束)
wait 命令有三种方式:
1. 无选项(缺省)
2. 使用进程ID
3. 使用加“%" 前缀的任务标号
命令将一直等到生命的任务或进程完成。
如果用户没有指定任务或进程, wait命令等待所有的后台任务完成。不加任何选项的
wait对启动一系列后台任务的shell脚本很有用。当它们全部完成时, 脚本可以继续处理。
for example:
$ wait %1
====================================================
5. kill command
$kill %1
其中 1 为任务标号。
====================================================
6. exec command(覆盖当前进程)
exec 命令会用一个新进程替换当前进程,使用该命令时要特别小心。
如果用户在主(登录) shell 解释器中使用 exec, shell 解释器将会被新进程代替。
====================================================
7. 数组
数组提供了一种将变量集合分组的方法。
7.1
创建数组变量的最简单的方法就是为数组中的每一个元素赋值,表达式如下:
$ name[index]=value
这里, name 为数组名, index是数组中程序员想设置的下标, value 是想为
该项赋值的值。例如,下列命令:
$ FRUIT[0]=apple
$ FRUIT[1]=banana
$ FRUIT[2]=orange
设置了数组FRUIT前三项的值。也可以用如下标量做相同的事:
$ FRUIT_0=apple
$ FRUIT_1=banana
$ FRUIT_2=orange
为数组赋值不一定按顺序,例如可以直接:
$ FRUIT[10]=plum
shell 只跟踪那些赋了值的数组元素。
7.2
数组初始化的第二中方式是一次设置多个元素,如下所示:
$ name=(value1 value2 value3 ... valuen)
注意使用的是连续数组下标。例如:
$ band=(derri terry mike gene)
等价于:
$ band[0]=derri
$ band[0]=terry
$ band[0]=mike
$ band[0]=gene
在 bash 中, 当为多个数组元素赋值时,可在置前面加上数组下标:
myarray=([0]=derry [3]=gene [2]=mike [1]=terry)
数组下标不必按顺序,下标也不一定为整型。
7.3
在为数组赋值后,可对它们进行访问:
${name[index]}
可使用如下方式访问数组中的所有项:
${name[*]}
${name[@]}
for example:
cjash@linux-sdik:trunk\> fruit[0]=apple
cjash@linux-sdik:trunk\> fruit[1]=peach
cjash@linux-sdik:trunk\> fruit[2]=plum
cjash@linux-sdik:trunk\> echo fruit[*]
fruit[*]
cjash@linux-sdik:trunk\> echo "fruit[*]"
fruit[*]
cjash@linux-sdik:trunk\> echo "${fruit[*]}"
apple peach plum
cjash@linux-sdik:trunk\> echo "${fruit[@]}"
apple peach plum
cjash@linux-sdik:trunk\>
====================================================
8. readonly 设变量为只读
unset variable 删除变量
====================================================
9. 环境变量
PWD
UID 当前用户的数组用户ID
SHLVL shell 嵌套的层数
RANDOM 每次被引用时, 产生从 0~32767 之间的随即整数。通过为 $RANDOM赋值,
可初始化随机数序列。若$RANDOM被删除则丢失其特性,即使在随后重新设置,也不再有随即数的性质。
SECONDS 返回 shell 被激活后的秒数。
IFS Internal Field Separator
PATH
HOME
====================================================
10. command [!characters]
匹配除在集合中指定字符外的所有字符的能力
$ ls [!a]*
列出所有除以 a 字符开头的所有文件。
====================================================
11. 变量替换
${parameter:-word} 若parameter为空或未设置,则用word代替 parameter进行替换,
parameter的直不变, 例如
--------------------------
cjash@linux-sdik:trunk\> echo ${AAA:-hello}
hello
cjash@linux-sdik:trunk\> AAA=world
cjash@linux-sdik:trunk\> echo ${AAA:-hello}
world
cjash@linux-sdik:trunk\>
--------------------------
${parameter:=word} 若parameter为空或未设置,则parameter设为值word
--------------------------
cjash@linux-sdik:trunk\> echo ${ABC:=world}; echo ${ABC}
world
world
cjash@linux-sdik:trunk\>
--------------------------
${parameter:?message} 若parameter为空或未设置, 则message作为标准错误打印出来,这
可用来检查变量是否正确设置。
--------------------------
cjash@linux-sdik:trunk\> echo ${CDE:?"no CDE is undefined"}
bash: CDE: no CDE is undefined
cjash@linux-sdik:trunk\> CDE="define cde"
cjash@linux-sdik:trunk\> echo ${CDE:?"no CDE is undefined"}
define cde
cjash@linux-sdik:trunk\>
--------------------------
${parameter:+word} 若parameter设置了, 则用word代替parameter进行替换,
parameter的值不变。
--------------------------
注意之前 CDE 的内容为 "define cde":
cjash@linux-sdik:trunk\> echo ${CDE:+"I missing you, so much sh"}
I missing you, so much sh
cjash@linux-sdik:trunk\> unset CDE
cjash@linux-sdik:trunk\> echo ${CDE:+"I missing you, so much sh"}
cjash@linux-sdik:trunk\>
--------------------------
====================================================
12. $((expression)) 执行算术运算
====================================================
13.
====================================================
====================================================
====================================================
====================================================
====================================================
====================================================
====================================================
====================================================
====================================================
====================================================
====================================================
====================================================
====================================================
====================================================
====================================================
====================================================
====================================================
====================================================
====================================================
====================================================
====================================================
====================================================
====================================================
====================================================
====================================================
====================================================
====================================================
====================================================
====================================================
====================================================
====================================================
====================================================
====================================================
====================================================
====================================================
====================================================
====================================================
====================================================
阅读(757) | 评论(0) | 转发(0) |