Shell基础学习(零)
总阅读次
>2016-05-03,周二(假期) > >晴转雨 > >教材《Linux Shell命令行及脚本编程实例详解》
Shell简介
shell是Linux的外壳,是Linux的用户界面,可以为用户提供输入命令和参数,并可以得到命令执行结果的环境。用户、shell和操作系统之间的关系.
Shell在Linux环境中扮演了非常重要的角色,包括读取命令行、解释它的含义并执行、通过输出返回执行结果等等。
Linux环境由以下几部分构成
- 内核———Linux操作系统的核心
- Shell——为用户和内核提供一个交互的接口
- 终端模拟器——它允许用户输入命令并在屏幕上回显命令的运行结果
- Linux桌面和窗口管理器——Linux桌面是各种软件应用程序的集合。它包括文件管理器、窗口管理器、终端模拟器等。
Bash简介
Bash是一种与Bourne Shell兼容的、执行从标准输入设备或文件读取的命令语言解释器。Bash是Bourne-Again Shell的缩写
Linux最常用的shell有
Bourne Shell
(sh)、C Shell
(csh)、Korn Shell
(ksh)
- 查看系统可以用的shell
1
root@ubuntu:~# cat /etc/shells
- 查看root用户默认使用哪种shell
1
root@ubuntu:~# grep root /etc/passwd
- 查看当前用户使用的shell类型或者
1
root@ubuntu:~# echo $SHELL
1
root@ubuntu:~# ps -p $$
** shell常见快捷键**
按键 | 说明 |
---|---|
CTRL + W |
删除光标为之前单词 |
CTRL + U |
清空行 |
CTRL + r |
搜索先前使用的命令 |
CTRL + C |
终止当前的命令 |
CTRL + D 或exit、logout |
退出当前登入 |
ESC + T |
调换光标前的2个单词 |
Shell中的变量
常用系统变量
系统变量 | 含义 |
---|---|
BASH_VERSION |
保存Bash实例的版本 |
DISPLAY |
设置X display名字 |
EDITOR |
设置默认的文本编辑器 |
HISTFILE |
保存命令历史的文件名 |
HISTFILESIZE |
命令历史文件所能包含的最大行数 |
HISTSIZE |
记录命令历史中的命令数 |
IFS |
定义Shell的内部字段分隔符,一般是空格符、制表符和换行符 |
PATH |
搜索命令的路径。Linux下的标准命令之所以能在Shell命令下任何路径直接诶使用,就是因为标准命令所在目录的路径定义在PATH变量中。 |
PS1 |
你的提示符设定 |
SHELL |
设置登入Shell的路径 |
TERM |
设置你的登入终端类型 |
shell脚本
shell脚本就是将许多指令集汇整在一起,让用户更容易就能操作执行多个命令,主要方便管理员进行设置或管理使用。
shell提供数组、循环、条件以及逻辑覆盖判断等重要功能,让使用者可以直接以shell来写程序。
定义变量
- Shell默认是字符串赋值,比如:如果要将算术表达式的数值给一个变量则应该使用
1
2
3
4let var=1
var=$var+1
echo $var
1+1let
例如1
2
3
4
5var=1
var2=2
let var=$var1+$var2
echo $var
3 - 将Linux命令赋值给变量
1
2
3
4
5
6
7var=`pwd`
echo $var
/root
或者也可以使用$(...)来实现同样的功能,该方法可以避免歧义:
var=$(pwd)
echo $var
/root - echo输出的时候要注意歧义,例如:
1
2
3
4
5
6
7
8# LOGDIR="/var/log"
# echo "The log file is $LOGDIRmessages"
//其输出结果是
The log file is
//bash将会查找一个叫LOGDIRmessages的变量,而不是$LOGDIR
//避免歧义应该:
$ echo "The log file is ${LOGDIR}messages"
The log file is /var/log/messages
变量的引用
应用一个变量最好是用双引号将变量名括起来。例如:”$variable”
这样可以防止被引用的变量特殊字符(除$,’和)被解释为其他错误含义
使用双引号可以放置变量中由多个单词组成的字符串分离。
1 | root@ubuntu:~# LIST="one two three 四" |
1 | rootfor var in "$LIST" #将LIST的值作为一个整体传入for循环 :~# |
多个变量实例:
1 | root@ubuntu:~# var1="一 二 三 四 五 六 七" |
用echo输出一些奇怪变量:
输出变量:带双引号/不带双引号的区别
1 | root@ubuntu:~ |
1 | root@ubuntu:~ |
这里输出变量带不带双引号均无区别
1 | root@ubuntu:~# IFS='\' |
1 |
|
export
export命令可以用于传递一个或多个变量的值到任何后继脚本
创建
1
export [-fnp] [变量或函数名称]=[变量设置值]
删除
1 | unset [-fv] [变量函数名称] |
- 检查变量是否存在
1 | root@ubuntu:~# echo ${whatever:? ERROR: The variable is not defined} |
SHell环境进阶
**!!**重复上次执行过的命令
1 | root@ubuntu:~# uptime |
**!COMMAND
**回调最近一次
执行的以指定字符开头的命令
1 | root@ubuntu:/home/takethat/scripts# !up |
使用history
列出列表的行号来重新调用历史命令
1 | 2030 ls |
shell脚本编写
- shell脚本传参数