鸟哥的Linux私房菜下载见
http://www.linuxidc.net/thread-2200-1-1.html
http://www.linuxidc.net/thread-2268-1-1.html
Bash的优点:
1、命令编修能力 (history):
曾经输入的指令都被记录下来,记录的文件在根目录的.bash_history下。~/.bash_history记录的是上一次登入以前执行过的指令,这一次登陆所运行的命令都被缓存在内存中,当你成功的注销系统后,该命令记忆才会记录到 .bash_history 当中!
2、命令与文件补全功能: ([tab] 按键的好处)
[Tab] 接在一串命令的第一个字的后面,则为命令补全;
[Tab] 接在一串命令的第二个字以后时,则为『文件补齐』!
3、命令别名配置功能: (alias)
4、工作控制、前景背景控制: (job control, foreground, background)
5、程序化脚本: (shell scripts)
6、通配符: (Wildcard)
显示变量的值要用echo指令:
语法:
[root @test root]# echo $variable
范例:
[root @test root]# echo $PATH
/bin:/sbin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin
[root@test root]# echo $PATH
/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin:/usr/local/bin:/usr/local/sbin
[root@test root]# echo $HOME
/root
显示系统中的所有环境变量可以使用env指令
比较重要的几个环境变量
HOME 登入者的根目录
SHELL 目前这个环境使用的 SHELL 是哪支程序
HISTSIZE 当前的指令记忆数量
MAIL 您的邮件文件
PATH 文件和命令的搜寻路径
set命令不止显示环境变量而且显示用户自定义变量
配置变量:变量名=变量内容
变量的配置规则:
1、变量与变量内容以一个等号『=』来连结
2、等号两边不能有空格符
3、变量名称只能是英文字母与数字,但是开头字符不能是数字
4、变量内容若有空格符可使用双引号『”』或单引号『’』将变量内容结合起来,但
双引号内的特殊字符如 $ 等,可以保有原本的特性,如下所示:
『var=”lang is $LANG”』则『echo $var』可得『lang is en_US』
单引号内的特殊字符则仅为一般字符 (纯文本),如下所示:
『var=’lang is $LANG’』则『echo $var』可得『lang is $LANG』
5、可用跳脱字符『 \ 』将特殊符号(如 [Enter], $, \, 空格符, ‘等)变成一般字符
6、在一串命令中,还需要藉由其他的命令提供的信息,可以使用反单引号『`命令`』或 『$(命令)』。注意,那个 ` 是键盘上方的数字键 1 左边那个按键,而不是单引号
7、若该变量为扩增变量内容时,则可用 “$变量名称” 或 ${变量} 累加内容,如:『PATH=”$PATH”:/home/bin』
8、若该变量需要在其他子程序运行,则需要以 export 来使变量变成环境变量,如:『export PATH』
9、通常大写字符为系统默认变量,自行配置变量可以使用小写字符
10、取消变量的方法为使用 unset :『unset 变量名称』例如取消 myname 的配置:
『unset myname』
set命令:
OSTYPE=linux-gnu <== 操作系统的类型!
PPID=20025 <== 父程序的 PID (会在后续章节才介绍)
PS1='[\u@\h \W]\$ ‘ <== PS1 就厉害了。这个是命令提示字符,也就是我们常见的
[root@www ~]# 或 [dmtsai ~]$ 的配置值啦!可以更动的!
PS2=’> ‘ <== 如果你使用跳脱符号 (\) 第二行以后的提示字符也
name=VBird <== 刚刚配置的自定义变量也可以被列出来喔!
$ <== 目前这个 shell 所使用的 PID
? <== 刚刚运行完命令的回传值。
环境变量PS1
PS1:(提示字符的配置)
这是 PS1 (数字的 1 不是英文字母),这个东西就是我们的『命令提示字符』
环境变量$代表本Shell的线程代号,也就是PID
环境变量?:上一个命令所传回的值(正确返回0,错误返回1)
变量键盘读取、数组与宣告: read, array, declare
要读取来自键盘输入的变量,用 read 这个命令
[root@www ~]# read [-pt] variable
选项与参数:
-p :后面可以接提示字符!
-t :后面可以接等待的『秒数!』这个比较有趣~不会一直等待使用者啦!
declare / typeset
declare 或 typeset 是一样的功能,就是在『宣告变量的类型』。如果使用 declare 后面并没有接任何参数,那么 bash 就会主动的将所有的变量名称与内容通通显示出来,就好像使用 set 一样。
[root@www ~]# declare [-aixr] variable
选项与参数:
-a :将后面名为 variable 的变量定义成为数组 (array) 类型
-i :将后面名为 variable 的变量定义成为整数数字 (integer) 类型
-x :用法与 export 一样,就是将后面的 variable 变成环境变量;
-r :将变量配置成为 readonly 类型,该变量不可被更改内容,也不能 unset
[root@www ~]# sum=100+300+50
[root@www ~]# echo $sum
100+300+50 <==咦!怎么没有帮我计算加总?因为这是文字型态的变量属性啊!
[root@www ~]# declare -i sum=100+300+50
[root@www ~]# echo $sum
450 <==瞭乎??
备注:1、变量类型默认为『字符串』。2、bash 环境中的数值运算,默认最多仅能到达整数形态
数组 (array) 变量类型
[root@www ~]# var[1]=”small min”
[root@www ~]# var[2]=”big min”
[root@www ~]# var[3]=”nice min”
[root@www ~]# echo “${var[1]}, ${var[2]}, ${var[3]}”
small min, big min, nice min
与文件系统及程序的限制关系: ulimit
[root@www ~]# ulimit [-SHacdfltu] [配额]
选项与参数:
-H :hard limit ,严格的配置,必定不能超过这个配置的数值;
-S :soft limit ,警告的配置,可以超过这个配置值,但是若超过则有警告信息。
在配置上,通常 soft 会比 hard 小,举例来说,soft 可配置为 80 而 hard
配置为 100,那么你可以使用到 90 (因为没有超过 100),但介于 80~100 之间时,
系统会有警告信息通知你!
-a :后面不接任何选项与参数,可列出所有的限制额度;
-c :当某些程序发生错误时,系统可能会将该程序在内存中的信息写成文件(除错用),
这种文件就被称为核心文件(core file)。此为限制每个核心文件的最大容量。
-f :此 shell 可以创建的最大文件容量(一般可能配置为 2GB)单位为 Kbytes
-d :程序可使用的最大断裂内存(segment)容量;
-l :可用于锁定 (lock) 的内存量
-t :可使用的最大 CPU 时间 (单位为秒)
-u :单一用户可以使用的最大程序(process)数量。
变量内容的删除、取代与替换
变量配置方式 | 说明 |
${变量#关键词} ${变量##关键词} | 若变量内容从头开始的数据符合『关键词』,则将符合的最短数据删除 若变量内容从头开始的数据符合『关键词』,则将符合的最长数据删除 |
${变量%关键词} ${变量%%关键词} | 若变量内容从尾向前的数据符合『关键词』,则将符合的最短数据删除 若变量内容从尾向前的数据符合『关键词』,则将符合的最长数据删除 |
${变量/旧字符串/新字符串} ${变量//旧字符串/新字符串} | 若变量内容符合『旧字符串』则『第一个旧字符串会被新字符串取代』 若变量内容符合『旧字符串』则『全部的旧字符串会被新字符串取代』 |
变量的测试与内容替换
变量配置方式 | str 没有配置 | str 为空字符串 | str 已配置非为空字符串 |
var=${str-expr} | var=expr | var= | var=$str |
var=${str:-expr} | var=expr | var=expr | var=$str |
var=${str+expr} | var= | var=expr | var=expr |
var=${str:+expr} | var= | var= | var=expr |
var=${str=expr} | str=expr var=expr | str 不变 var= | str 不变 var=$str |
var=${str:=expr} | str=expr var=expr | str=expr var=expr | str 不变 var=$str |
var=${str?expr} | expr 输出至 stderr | var= | var=$str |
var=${str:?expr} | expr 输出至 stderr | expr 输出至 stderr | var=$str |
命令别名用alias来定义,取消命令别名用unalias。
[root@www ~]# alias lm=’ls -al | more’
历史命令history
[root@www ~]# history [n]
[root@www ~]# history [-c]
[root@www ~]# history [-raw] histfiles
选项与参数:
n :数字,意思是『要列出最近的 n 笔命令行表』的意思!
-c :将目前的 shell 中的所有 history 内容全部消除
-a :将目前新增的 history 命令新增入 histfiles 中,若没有加 histfiles ,
则默认写入 ~/.bash_history
-r :将 histfiles 的内容读到目前这个 shell 的 history 记忆中;
-w :将目前的 history 记忆内容写入 histfiles 中!
[root@www ~]# !number
[root@www ~]# !command
[root@www ~]# !!
选项与参数:
number :运行第几笔命令的意思;
command :由最近的命令向前搜寻『命令串开头为 command』的那个命令,并运行;
!! :就是运行上一个命令(相当于按↑按键后,按 Enter)
bash shell 的配置文件
系统设定值
/etc/profile:这个文件设定了几个重要变量,例如PATH、USER、MAIL、HOSTNAME、HISTSIZE、umask等,
/etc/bashrc:这个文件用于规划umask,同时规划提示符的内容(就是里面那个PS1)。
/etc/man.config:这个文件指定了输入man时查看数据的路径设定
个人设定值
~/.bash_profile:里面定义了个人路径(PATH)与环境变量的文件名称
~/.bashrc:这个文件对于个人喜好的bash设定是最重要的,命令别名的设定,路径的重新定义等都可以在这里设定
~/.bash_history:这个文件用于将您曾经用过的命令记录下来
~/.bash_logout:这个文件则是在您注销shell的时候BASH为您所做的事情
bash中用到的通配符与特殊符号:
* | 通配符,代表任意字符(0到多个) |
? | 通配符,代表一个字符 |
# | 注释,这个最常用在脚本中,视为说明 |
\ | 跳转符号,将特殊字符或通配符还原成一般字符 |
| | 分隔两个管线命令的界定 |
; | 连续性命令的界定(注意,与管线命令不同) |
~ | 用户的根目录 |
$ | 即变量前需要加的变量值 |
& | 将指令变成在背景下工作 |
! | 逻辑运算中的“非”(not) |
/ | 路径分隔符号 |
>, >> | 输出导向,分别为“取代”与“累加” |
‘ | 单引号,不具有变量置换功能 |
“ | 具有变量置换功能 |
` ` | 两个“`”中间为可以先执行的指令 |
( ) | 中间为子shell的起始与结束 |
[ ] | 中间为字符组合 |
{ } | 中间为命令区块组合 |
Ctrl + C | 终止当前命令 |
Ctrl + D | 输入结束(EOF),例如邮件结束的时候 |
Ctrl + M | 就是Enter |
Ctrl + S | 暂停屏幕的输出 |
Ctrl + Q | 恢复屏幕的输出 |
Ctrl + U | 在提示符下,将整行命令删除 |
Ctrl + Z | 暂停当前命令 |