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不兼容
⑤ 其他:如ash、zsh等
主要介绍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