Decode360's Blog

业精于勤而荒于嬉 QQ:150355677 MSN:decode360@hotmail.com

  BlogJava :: 首页 :: 新随笔 :: 联系 ::  :: 管理 ::
  397 随笔 :: 33 文章 :: 29 评论 :: 0 Trackbacks
Linux shell程序设计(一).基本操作
 
    今天开始来系统得学习一下Linux中的shell编程操作。这部分的内容,说简单也简单,但是主要是要多应用,每次看到不同的写法会有不同的领悟,要精通是很不容易的。可是用一些简单的结构写出很复杂的过程来。好了,今天先来学习一点基本的操作。
 
 
一、Shell概述
 
1、Shell的种类
 
    ① sh (Bourne shell):shell的基础版本,编程方面优秀,但交互性方面不好。
    ② csh (C shell):语法与C类似,交互性更好,但与sh不兼容
    ③ ksh (Korn shell):集合sh和csh有点,并兼容sh
    ④ bash(Bourne Again shell):默认shell,集合csh和ksh有点,但与sh不兼容
    ⑤ 其他:如ashzsh
 
    主要介绍bash的用法,bash主要继承了csh和ksh的以下优点:
 
    * 命令行历史 (翻阅历史命令)
    * 命令行编辑 (可用vi修改已输命令)
    * 命令补全 (Tab)
    * 别名扩展 (建立代表某些命令的名字)
 
2、Shell的特点
 
    ① 可建立脚本来组合命令
    ② 提供了文件名扩展字符(*/?/[])
    ③ 可直接使用shell内置命令而无需创建新进程
    ④ 灵活的数据流:通配符、输入/出重定向、管道线等
    ⑤ 结构化的程序模块:顺序、条件、循环
    ⑥ 后台执行命令能力:&
    ⑦ 提供可配置环境,用户可创建、修改命令
    ⑧ 提供高级语言命令,可制作shell脚本
 
3、shell程序示例
 
    ① 使用shell最简单的方法就是直接输入命令,如:
   
    $ ls -l /usr
 
    ② 简单shell脚本
 
    $ cat ex1
    date
    pwd
    cd ..
 
    这个脚本表示依次执行脚本中的命令
    先显示出日期,再显示当前工作目录,再返回上级目录
 
    ③ 带控制结构的脚本
 
    #!/bin/bash
    # If no arguments then listing the current directory.
    # Otherwise listing each subdirectory.
 
    if test $# = 0
    then ls
    else
      for  i
      do
        ls -l $i|grep '^d'
        done
    fi
 
    说明:
    1) #!/bin/bash 表示下面的脚本用bash编写,必须用bash进行解释执行
    2) #开头的行为注释行
    3) if下面的for循环语句结构
 
4、Shell脚本的执行
 
    ① 输入定向到shell脚本
    $ bash < ex1
 
    shell从文件ex1读取命令并执行,执行完成后返回shell命令状态,此命令不能带参数
 
    ② 以脚本名作为bash参数
    $ bash ex2
    $ . ex2
 
    这种方法可以在后面加参数
    第二行的“. ex2”表示用当前shell执行该脚本,注意中间要有空格
 
    ③ 将shell脚本权限设为可执行
    $ chmod a+x ex2
    $ ex2
 
    可以将shell脚本所在目录加入到命令搜索目录,这样可以像普通命令那样随时调用。
 
 
二、命令历史
 
    bash为每个用户都维护了一个命令历史文件:~/.bash_history
 
1、显示历史命令
 
    ① 不带参数
    $ history
 
    列出所有的命令,并附有编号。所有命令均是曾经被执行过的。
 
    ② 后面带数字
    $ history 50
 
    表示列出最后的50条命令
 
    ③ 删除所有信息
    $ history -c
 
2、执行历史命令
 
    ① 基本操作
    $ !50
 
    执行序号为50的命令
 
   ② 其他操作
 
    !!         重复执行上一条命令,即!-1
    !n         重新执行第n条命令
    !-n        重新执行倒数第n条命令
   !string    重新执行最近一条以string开头的命令
   !?string?  重新执行最近一条包含string的命令
    !#         执行到现在为止所输入的整个命令行
 
3、配置历史命令环境
 
    ① 更改文件路径
    $ HISTFILE="/home/wxq/.myhistory"
 
    通过更改环境变量HISTFILE来改变存放历史命令的文件
 
   ② 改变记录个数
    $ HISTSIZE=600
 
 
三、名称补全
 
    在输入文件名时,使用Tab键,会自动进行名称补全
 
    ① 当系统可以唯一确定是哪个目录或文件时,自动补全
    ② 当系统找到不止一个文件名时,把文件名补全到最后一个相同的字符为止
    ③ 若不能唯一确认时,尽量补全并响铃提示
 
    注:可以按两次Tab键(或Esc+?),使系统自动提示所有可以匹配的文件。
 
 
四、别名
 
    ① 创建别名
 
    bash可以用alias命令来定义别名。例如:
    $ alias ..='cd ..'
    $ alias cp='cp -i'
    $ alias ll='ls -l'
 
    注意:“=”两边不能有空格,如果命令中间有空格,需要用单引号括起来。
 
    ② 删除别名
    $ unalias ll  
 
    可以通过一下命令删除所有的别名:
    $ unalias -a
 
 
posted on 2009-01-06 22:08 decode360 阅读(146) 评论(0)  编辑  收藏 所属分类: 03.Linux

只有注册用户登录后才能发表评论。


网站导航: