shell简介
 
shell处于kernel的外层,用来负责接收使用者输入的命令,然后将命令解释成kernel能了解的方式,然后由kernel去执行,再将结果传回默认的输出周边。shell是一种命令解释器,同时也是一个程序语言。shell有很多种,在众多的Linux发行版中,标准的shell是bash,也是我们学习的主要对象。
 
第一个程序
范例:hello.sh
  1. #!/bin/bash
  2. echo 'Hello World'
 
执行之前,给予执行权限:
chmod +x hello.sh
 
执行:
./hello.sh
 
输出:
Hello World
 
这样第一个shell脚本就成功的运行了。

基础概念部分
 
登陆主机
登陆主机分为本地登陆和远程登陆。
本地登陆:就是直接面对主机,由键盘输入用户密码登陆,使用tty1-tty6,或者图形界面tty7
远程登陆:通过网络连接主机,以虚拟终端的方式登陆,使用ssh
 
退出登陆
1.使用命令exit
2.使用【Crtl+D】退出
 
文件
在Linux中,任何东西包括硬件都视为文件。文件可以分为几种:
一般文件:纯文本文件,二进制文件。如果文件具有执行权限,称为执行文件。
目录:包含文件。
设备文件:字符文件,磁盘文件。
内部进程通信文件:socket文件,连接文件(pipe、fifo)两种。
特殊文件:符号链接文件,soft link或者symbolic link
隐藏文件:文件名的第一个字符是一个点(.)
常见文件代码:
-   一般文件
d   目录
l   符号链接文件
b   块文件
c   字符文件
s   socket文件
p  管道文件
 
目录
目录也是文件的一种,目录中可以包含子目录和文件。
 
通配符
通配符是指一种文件名的样式,可用来对比文件名,以找到相符的文件。
* 代表任意的字符串,可以是空字符串
? 代表一个字符,但不可以为空
 
转义符
反斜线 \ 是转义字符,也叫做“逃逸字符”,目的在于使后接的字符回复原来作为单纯字符的用途。
 
字符集合
[abc] 代表a,b,c中任意的一个字符
[a-z] 代表a到z中的任意一个字符,小写英文字母
[A-Z] 代表大写英文字母
[A-Za-z] 代表字母
[0-9] 代表数字
[a-z_-] 代表任意一个小写英文字母,_ 或者 -
[!0-9] 代表非数字
[0-9!] 代表数字或感叹号
[\!0-9] 代表数字或感叹号
 
括号扩展
{g,nc,s}ftp 代表gftp ncftp sftp
 
本文出自 “转身离开-王军” 博客,请务必保留此出处http://johnwang.blog.51cto.com/474770/324683


shell程序的基本组成结构
 
shell结构大体是由设定变量、内置命令、shell的语法结构、函数组成。
使用实例说明:test.sh
  1. #!/bin/bash
  2. #说明使用/bin/bash作为这个脚本的解释器
  3. #定义一个函数
  4. function my_fun () {
  5. echo "Hello, $1,today is $2"
  6. }
  7. #定义连个变量
  8. name=$1
  9. today=`date`
  10. #函数调用
  11. my_fun "$name" "$today"
 
上面的这个脚本要想运行还需要做一些操作,首先给予执行权限
chmod +x test.sh
然后执行
./test.sh john
输出
Hello, john,today is Tue Jun  1 14:51:46 CST 2010
 
父shell和子shell
在执行script之前,身处的环境就是父shell。执行script之时,父shell根据#!/bin/bash,fork出来一个新的shell环境,然后在子shell中执行,执行完毕后子shell结束,任然回到父shell中,这样不会影响到父shell的环境。
 
login shell 和non-login shell
shell编程入门步步高_linux
这张图片是login shell的流程,当是non-login shell时,只执行方框中的标注的部分。由这张图我们可以知道,在如下几种情况下,执行的流程。
登陆(login)
/etc/profile
~/.bash_profile
 
注销(logout)
~/.bash_logout
 
执行新shell,分成两种情况
1.执行交互式的shell
~/.bashrc
/etc/bashrc
 
2.执行非交互式的shell,比如执行script
会检查 BASH_ENV 变量的内容,如果有定义,则执行
本文出自 “转身离开-王军” 博客,请务必保留此出处http://johnwang.blog.51cto.com/474770/324784