1 / 23

使用 Shell(bash)

使用 Shell(bash). 刘西洋. 大纲. 1 控制台 1.1 Linux 控制台终端 1.2 终端模拟器 2 shell 有几种 3 使用 bash 4 bash 脚本编程 参见 《Redhat Linux 指南:服务器设置与程序设计篇 》 第 11 章, bash 程序设计。. 1 控制台. Linux 控制台终端 可以使用 Alt+[F1-F6] 组合键切换和英文终端。 Linux 终端模拟器 图形界面下的终端模拟器。比如, kde 的 konsole 程序和 gnome 的 gnome-terminal. 1.1 控制台终端.

mae
Download Presentation

使用 Shell(bash)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 使用Shell(bash) 刘西洋

  2. 大纲 • 1 控制台 • 1.1 Linux控制台终端 • 1.2 终端模拟器 • 2 shell有几种 • 3 使用bash • 4 bash脚本编程 • 参见《Redhat Linux指南:服务器设置与程序设计篇》第11章,bash程序设计。

  3. 1 控制台 • Linux控制台终端 • 可以使用Alt+[F1-F6]组合键切换和英文终端。 • Linux终端模拟器 • 图形界面下的终端模拟器。比如,kde的konsole程序和gnome的gnome-terminal

  4. 1.1 控制台终端 • 控制台终端,包含两种设备文件/dev/ttyn, /dev/console。 • Linux 中,键盘显示器组合被称为控制台。它仿真了类型为Linux的一种终端,设备文件ttyN与之相关联。第一个在控制台上登录时,使用tty1。 • tty1–tty6等称为虚拟终端,而tty0则是当前虚拟终端的一个别名,可以使用Alt+[F1-F6]组合键切换虚拟终端。 • /dev/console即控制台,是与操作系统交互的设备,系统将一些信息直接输出到控制台上。只有在单用户模式下,才允许用户登录控制台。 • 命令ps -ax查看进程与哪个控制终端相连。

  5. 1.2 终端模拟器 • 终端模拟器,图形环境下的控制台终端模拟程序。主要有konsole,gnome-terminal和Xterm三种。 • 终端模拟器,让我们在不脱离图形环境的情况下使用终端。并且提供更多控制台终端无法提供的附加功能。比如,鼠标操作和复制粘贴操作。提供更便利的功能。

  6. 2 Shell有几种 • sh, Steve Bourne编写。多见AT&T Unix system • csh,Bill Joy编写,多见berkeley Unix system。 • bash ,即Bourne Again Shell,Brian Fox编写。 • tcsh ,csh的开源版本。与csh有抹不清的关系。 • ash,轻量级sh,kenneth almquist编写,用于netbsd,多用于嵌入式。 • ksh,David Korn编写,Unix system V systems 默认shell。AIX默认shell。 • zsh,sh的一种克隆版,Mac OS X 曾使用。

  7. 3 使用BASH • 3.1 Bash 配置文件 • 3.2 Bash 环境变量 • 3.3 Bash 内置命令 • 3.4 Bash 快捷键 • 3.5 Bash 提示符 • 3.6 Bash 历史命令 • 3.7 Bash 命令嵌套 • 3.8 Bash 命令串接 • 3.9 Bash 作业管理

  8. 3.1 bash配置文件 [root@hongli ~]# ls –al 权限硬链接数属用户属组大小最后修改日期文件名 -rw------- 1 root root 13650 Apr 2 15:29 .bash_history -rw-r--r-- 1 root root 24 Mar 10 18:35 .bash_logout -rw-r--r-- 1 root root 191 Mar 10 18:35 .bash_profile -rw-r--r-- 1 root root 176 Mar 10 18:35 .bashrc 硬链接数表示当前文件硬链接count值。普通目录硬链接数为:2+子目录数。 /etc/bash_profile 系统为所有用户登录设置环境信息。第一次登录执行 /etc/bashrc 所有用户登录时所执行的脚本。第一次登录执行。 .bash_history 命令执行历史记录 .bash_logout 用户退出登录时执行的脚本,一般内容为clear 清屏命令。 .bash_profile bash用户配置文件,包含环境变量声明和一些其他配置 .bashrc 用户登录时,bash执行脚本可以配置命令别名等内容 .bash_profile调用.bashrc /etc/skel 目录,skel是 skeleton 的缩写,每当新建一个用户的时候 (通过 useradd 命令), /etc/skel 目录下的文件,都会原封不动的复制到新建用户的home目录下

  9. 3.2 bash 环境变量 • 变量,用特定名称保存一定值﹐以供程序将来使用。环境变量,具有全局特性的常规变量。 • 当我们登陆系统﹐首先获得 shell进程﹐再输入的命令都属于这个 shell 的子进程。当获得 shell 的时候﹐同时也获得一些环境设定。 • export通过导出已定义变量,创建环境变量。 • export命令指示系统为每个所创建的shell定义该变量的一个副本。新shell也可创建自己独有的环境变量。 • 环境变量一般在:~/.bash_profiles中声明

  10. 不可不知的几个变量 • $HOME 和~ 用户主目录 • [root@hongli ~]# echo ~ [root@hongli ~]# echo $HOME • /root /root • $SHELL 用户shell类型 • [root@hongli ~]# echo $SHELL • /bin/bash • $PS1 用户shell提示符格式 • [root@hongli ~]# echo $PS1 • [\u@\h \W]\$ • $PATH 用户执行命令时,系统寻找路径 • [root@hongli ~]# echo $PATH • /usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

  11. 3.3 bash内置命令 • 典型命令: • cd 切换目录 pwd 显示当前工作目录 • test 测试(也有/bin/test这条命令) • set unset 变量声明和取消 • echo 回显 exit 退出shell • history 显示历史执行命令 • type 显示命令的位置 • fg bg 作业控制,把作业后台和前台轮调 • 获取方法: • [linux@localhost ~]$ help • [linux@localhost ~]$ man bash • [linux@localhost ~]$ info bash

  12. 3.4 Bash快捷键 • 指针定位 • Ctrl+F Character forward 前进一个字符. • Ctrl+B Character backward 后退一个字符. • Alt+F Word forward 前进一个单词 • Alt+B Word backward 后退一个单词 • Ctrl+A Beginning of line 定位到行开始 • Ctrl+E End of line 定位到行结束 • Ctrl+L Clear screen 清屏 • 行编辑 • Ctrl+D Delete current 删除当前字符 • Backspace Delete previous 删除前一个字符 • Ctrl+T Transpose character 交换当前字符和前一个字符的位置

  13. Alt+T Transpose words 交换当前字符和前一个单词的位置 • Alt+U Uppercase word 大写当前单词 • Alt+L Lowercase word 小写当前单词 • Alt+C Capitalize word 把当前单词写成首字母大写形式 • Ctrl+V Insert special character 插入一个特殊字符例如插入tab,Ctrl+V+Tab. • 行剪切和粘贴 • Ctrl+K Cut end of line 剪切到行尾的所有字符 • Ctrl+U Cut beginning of line 剪切到行首的所有字符. • Ctrl+W Cut previous word 剪切指针前的整个单词. • Alt+D Cut next word 剪切指针后的整个单词.. • Ctrl+Y Paste recent text 粘贴最后一次剪切的内容 • Alt+Y Paste earlier text 回到上次剪切,然后粘贴 • Ctrl+C Delete whole line 删除整行

  14. 3.5 bash提示符 • linux 提示符即linux等待用户输入时所显示的字符: • 默认有PS1 PS2 PS3和PS4四个变量表示 • PS1 主提示符变量 • PS2 副提示符变量,命令行里较长命令的换行提示信息 • PS3 选择提示符变量,用户shell编程里,需要获取用户输入是的提示符。 • PS4 shell编程调试时使用。

  15. PS1变量可以使用的参数值(部分): \! 历史命令号,为bash_history文件中最大的number \# 本次登陆后,输入的有效的命令的个数。 \$ 提示字符,如果是root时,提示符为:# ,普通用户则为:$ \W 提示当前工作目录 \[ 后跟一些不需要在提示副显示的字符,例如设置颜色。 \] 对应\[ 结束设置 \\ 显示反斜杠 \d 以“星期 月 日”的格式 显示当前日期 \h 显示主机名. \n 在命令提示符中创建新行。 \s 显示当前shell名称 \t 以 “小时 分 秒”的形式显示当前日期 \u 显示用户名. \w 显示当前工作目录的完整成路径 • http://hi.baidu.com/%C9%ED%B4%A6%BD%AD%BA%FE/blog/item/44855139a436b3d8d462254a.html

  16. 3.6 bash历史命令 • !n 调用number为n的命令 • !! 直接调用上一条命令 • !?string? 从后往前,匹配历史命令中字符为string的命令,然后调用。 • 10 history • 11 date • 12 echo $SHELL • 13 echo $PS1 • 14 data -h • [honliv@hongli root]$ !?dat? • data -h • bash: data: command not found

  17. 3.7 bash嵌套命令 • 有时候我们需要将一个命令的输出作为另一个命令的参量,这就需要命令嵌套。 • 命令嵌套的方式有一下两种方式: • $(command)和`command` • 实例: [honliv@hongli ~]$ echo "there are $(ls -l /etc | grep ^dr | wc -l) diretcories in /etc." there are 99 diretcories in /etc. [honliv@hongli ~]$ echo "there are `ls -l /etc | grep ^dr | wc -l` diretcories in /etc." there are 99 diretcories in /etc.

  18. 3.8 bash命令串接 • 标准输入输出和错误文件: • 标准输入文件stdin,文件描述符为0,默认对应终端的键盘; • 标准输出文件stdout,文件描述符为1,默认对应终端的屏幕; • 标准错误输出文件stderr,文件描述符为2,默认对应终端的屏幕; • 重定向符号: < 输入重定向符号 >输出重定向符号 | 管道串接符号 • Unix主张:每个命令实现简单的功能,并做好它。复杂的功能由多个命令的结合来实现。

  19. 实例:统计/etc目录下所有非隐藏目录个数 • 方法1 [honliv@hongli ~]$ ls -l /etc > etc.txt [honliv@hongli ~]$ cat etc.txt | more total 3088 -rw-r--r-- 1 root root 2518 Mar 21 20:35 DIR_COLORS -rw-r--r-- 1 root root 2420 Mar 21 20:35 DIR_COLORS.xterm drwxr-xr-x 4 root root 4096 Mar 13 11:39 NetworkManager …… [honliv@hongli ~]$ grep ^dr etc.txt | wc -l 99 • 方法2 [honliv@hongli ~]$ echo /etc > 1.txt [honliv@hongli ~]$ cat 1.txt /etc [honliv@hongli ~]$ ls -l `cat 1.txt` | grep ^dr | wc -l 99 • 方法3 [honliv@hongli ~]$ ls -l /etc | grep ^dr | wc -l 99

  20. 3.9 bash作业管理 • bash支持作业管理,背景执行命令。 • 命令: • jobs 显示作业 • fg 把作业调到前台运行 • bg 把作业调到后台运行 • 实例: • vi执行时,在一般模式下可按ctrl+z暂停进程 [root@hongli ~]# jobs [1]+ Stopped vi install.log [2] Stopped vi install.log.syslog [3]- Stopped vi upgrade.log +号表示默认作业,fg不带参数即将带+号的作业作为变量输入。 -号表示再次之的默认作业

  21. 要控制一个作业,将其结束或调到前台运行,可以使用%加作业号操作作业要控制一个作业,将其结束或调到前台运行,可以使用%加作业号操作作业 • % 指最后放到后台的作业。 • %string 指作业命令以string开头的作业,string必须唯一标识一个作业。否则将导致错误 • %?string 指在命令任何位置包含string的作业,同样必须唯一标识一个作业 • %-- 指在最后停止的作业前停止的作业,即倒数第二个停止的作业。 实例1 bg命令后台执行挂起的作业 find /usr > /tmp/allusefiles1 [root@hongli ~]# jobs [2] Stopped vi install.log.syslog [3]- Stopped vi upgrade.log [4]+ Stopped find /usr > /tmp/allusefiles1 [root@hongli ~]# bg %4 [4]+ find /usr > /tmp/allusefiles1 & [root@hongli ~]# jobs [2]- Stopped vi install.log.syslog [3]+ Stopped vi upgrade.log [4] Done find /usr > /tmp/allusefiles1

  22. 实例2 通配符匹配的方式调用作业 [root@hongli ~]# jobs [1] Stopped find /usr > /tmp/allusefiles1 [2] Stopped find /usr > /tmp/allu1sefiles [3]- Stopped find /usr > /tmp/allusefiles2 [4]+ Stopped find /usr > /tmp/allusefiles3 [root@hongli ~]# fg %find -bash: fg: find: ambiguous job spec [root@hongli ~]# fg %?3 find /usr > /tmp/allusefiles3 [root@hongli ~]# jobs [1] Stopped find /usr > /tmp/allusefiles1 [2]- Stopped find /usr > /tmp/allu1sefiles [2]+ Stopped find /usr > /tmp/allusefiles2 [root@hongli ~]# fg %?files3 -bash: fg: %?files3: no such job [root@hongli ~]# fg %?files2 find /usr > /tmp/allusefiles2 [root@hongli ~]# fg %?u1se find /usr > /tmp/allu1sefiles [root@hongli ~]# fg %find find /usr > /tmp/allusefiles1

  23. 下一讲 Linux用户管理

More Related