shell基础

shell是命令语言、命令解释程序及程序设计语言的统称。

1.Bash脚本以“#!”开头(文件的首行),而“#!”后面同时要将所使用的shell的路径明确指出。

#!  /bin/sh

#!   解释器地址  选项

下面陷进需要注意:

1)系统对第一行#!长度有限制,从63到1024个字符不等,因此尽量不要超过64个字符。

2)别在选项之后放置任何空白,因为空白也会跟着选项一起传递给被引用程序。

3)知道解释器的完整路径,可以用来规避一些问题。

下面的写法可以避免某种程度的欺骗式攻击(spoofing Attack).即添加选项符-,但不添加选项内容。

#! /bin/sh -

2.程序的注释符为“#”。

3.shell脚本的执行

1)设置权限后再执行脚本;

chmod +x scriptname

./scriptname

2)使用bash的内部指令“source”;

3)直接使用sh命令来执行。

sh/source myscript

4.环境变量的配置文件

1)/etc/profile是系统启动过程中执行的一个脚本,对所有用户生效。

2)~/.bash_profile是用户的脚本,在用户登录时生效。

3)~/.bashrc用户脚本在~/.bash_profile中调用生效。

5.shell环境变量

PATH:决定shell将到哪些目录中寻找命令或程序

HOME:当前用户主目录的完全路径名

HISTSIZE:历史记录数

LOGNAME:当前用户的登录名

SHELL:shell路径名

LANGUAGE:语言相关的环境变量

MAIL:当前用户的邮件存放目录

PSI:主指示符,对于ROOT用户为#,普通用户为$

PSZ:辅助指示符,默认为“>”

TERM:终端的类型

PED:当前工作目录的绝对路径名。

SHLVL代表shell打开的深度,进程第一次打开shell时$SHLVL=1,然后在此shell中再打开一个shell时$SHLVL=2。父shell的变量可以export到子shell,但子shell的变量export不影响父shell,但影响子shell的子shell。参考:How And Why You Would Use The $SHLVL Variable

6. 脚本路径后增加脚本

在shell脚本的头部出现 "#!/bin/sh /etc/rc.common",如果该脚本为x.sh,
如果执行命令为 ./x.sh parameters,即为运行 /etc/rc.common x.sh parameters,这说明 /etc/rc.common用于解析x.sh命令行参数
 
由于openwrt使用自己的初始script系统,所有的initscript必须使用/etc/rc.common作为wrapper安装在/etc/init.d/<name>下。
如/etc/init.d/httpd:
#!/bin/sh/etc/rc.common
# Copyright (C)2006 OpenWrt.org
 
START=50
start() {
    [ -d /www ] && httpd -p 80 -h /www-r OpenWrt
}
 
stop() {
    killall httpd
}
 
从上可以看出,script本身并不解析命令行参数,而是由/etc/rc.common来完成。
7. shell退出码
shell用exit可传出shell退出状态,但有时不准确:一个shell可能同时运行了多个进程,exit返回的只是某一个进程的状态。
通过exit前sleep 100可以看到多个进程,可能导致退出码不是理想值。
8. 命令行下快捷键

Ctrl+a:把光标移到行首。

Ctrl+e:把光标移到行尾。

Ctrl+l:清除终端。该快捷操作与在命令行键入clear作用相同。

Ctrl+d:从Shell提示中注销并关闭,使用该快捷键就不必键入exit

Ctrl+u:删除光标至行首的所有字符,使用这一快捷操作可以清除从光标处到行首的字符

Ctrl+K:删除从光标到行末所有字符。

Ctrl+t:新建屏幕。

Alt+1到9:选择屏幕。

 

 

posted @ 2015-08-12 16:03  yuxi_o  阅读(294)  评论(0编辑  收藏  举报