bash shell
1. Bash shell
1.1 什么是 shell ?
1.2 系统的 shell 与 /etc/shells 功能
1.3 Bash shell 的功能
1.4 Bash shell 的内建命令: type
1.5 指令的下达
2. Shell 的变量功能
2.1 变量的取用与设定:echo, 变量设定规则, unset
2.2 变数的用途?
2.3 环境变量的功能: env, 一些重要的环境变量, set, export
2.4 语系档案的变量 (locale)
2.5 变量的有效范围:
2.6 变量键盘读取、数组与宣告: read, declare, array
2.7 与档案系统及程序的限制关系: ulimit
2.8 其它额外变量功能
3. 命令别名与历史命令:
3.1 命令别名设定: alias, unalias
3.2 历史命令: history, HISTSIZE
4. Bash shell 使用环境:
4.1 绝对路径与相对路径
4.2 登录讯息显示数据: /etc/issue, /etc/motd
4.3 环境设定档: bashrc, ~/.bashrc, ~/.profile, profile...,/etc/inputrc, source
4.4 终端机的环境设定: stty, set
4.5 万用字符与特殊符号:
5. 数据流重导向 (redirecte)
5.1 何谓数据流重导向?
5.2 命令执行的判断依据: ; , &&, ||
6. 管线命令 (pipe):
6.1 撷取命令: cut, grep
6.2 排序命令: sort, wc, uniq
6.3 双向重导向: tee
6.4 字符转换命令: tr, col, join, paste, expand
6.5 分割命令: split
6.6 参数代换: xargs
6.7 关于减号 - 的用途
习题:
在 Linux 上可以找到哪些 shell(举出三个) ?那个档案记录可用的 shell ?而 Linux 预设的
shell 是?
1) /bin/bash, /bin/tcsh, /bin/csh
2) /etc/shells
3) bash ,亦即是 /bin/bash。
• 在 shell 环境下,有个提示字符 (prompt),他可以修改吗?要改什么?预设的提示字符内容是?
可以修改的,改 PS1 这个变量,这个 PS1 变量的预设内容为:『[\u@\h \W]\$』
• 如何显示 HOME 这个环境变量?
echo $HOME
• 如何得知目前的所有变量与环境变量的设定值?
环境变量用 env 而所有变量用 set 即可显示
• 我是否可以设定一个变量名称为 3myhome ?
不行!变量不能以数字做为开头,参考变量设定规则的内容
• 在这样的练习中『A=B』且『B=C』,若我下达『unset $A』,则取消的变数是 A 还是 B?
被取消的是 B 喔,因为 unset $A 相当于 unset B 所以取消的是 B ,A 会继续存在!
• 如何取消变量与命令别名的内容?
使用 unset 及 unalias 即可
• 如何设定一个变量名称为 name 内容为 It's my name ?
name=It\'s\ my\ name 或 name="It's my name"
• 环境变量档案的加载顺序?
先由 /etc/passwd 取得 bash 这个 shell ,再到 /etc/profile 读取主要的环境变量,同时亦
会将 /etc/inputrc 及 /etc/profile.d 内容均读入。之后,再到个人的家目录读取
~/.bash_profile 及 ~/.bashrc 等档案!
• man page 的路径设定档案?
/etc/man.config 或 /etc/man.conf
• 试说明 ', ", 与 ` 这些符号在变量定义中的用途?
参考变量规则那一章节,其中, " 可以具有变量的内容属性, ' 则仅有一般字符,至于 ` 之内
则是可先被执行的指令。
• 跳脱符号 \ 有什么用途?
可以用来跳脱特殊字符,例如 Enter, $ 等等,使成为一般字符!
• 连续命令中, ;, &&, || 有何不同?
分号可以让两个 command 连续运作,不考虑 command1 的输出状态, && 则前一个指令必需要没
有错误讯息,亦即回传值需为 0 则 command2 才会被执行, || 则与 && 相反!
• 如何将 last 的结果中,独立出账号,并且印出本月份曾经登入过的账号?
last | cut –d “ “ –f1 | sort | uniq
• 请问 foo1 && foo2 | foo3 > foo4 ,这个指令串当中, foo1/foo2/foo3/foo4 是指令还是档案?
整串指令的意义为?
foo1/foo2 与 foo3 都是指令, foo4 是装置或档案。整串指令意义为:
1. 当 foo1 执行结果有错误时,则该指令串结束;
2. 若 foo1 执行结果没有错误时,则执行 foo2 | foo3 > foo4 ;
1. foo2 将 stdout 输出的结果传给 foo3 处理;
2. foo3 将来自 foo2 的 stdout 当成 stdin ,处理完后将数据流重新导向 foo4
这个装置/档案
• 如何秀出在 /bin 底下任何以 a 为开头的档案文件名的详细资料?
ls -l /bin/a*
• 如何秀出 /bin 底下,文件名为四个字符的档案?
ls -l /bin/????
• 如何秀出 /bin 底下,档名开头不是 a-d 的档案?
ls -l /bin/[!a-d]*
• 当我离开 bash 后,希望系统可以帮我将最近工作的:1.)工作日期; 2.)100 个历史命令独立 记
录到 ~/.bash_localcom 档案中,该如何设定?
我可以编辑 ~/.bash_logout ,将这个档案内容变成:
# ~/.bash_logout
date >> ~/.bash_localcom
history 100 >> ~/.bash_localcom
clear
• 我想要让终端机接口的登入提示字符修改成我自己喜好的模样,应该要改哪里?(filename)
/etc/issue
• 承上题,如果我是想要让使用者登入后,才显示欢迎讯息,又应该要改哪里?
/etc/motd