认识与学习bash
1. 硬件、内核与shell
2. 用户界面《=====》核心Kernal(cpu进程,内存管理、磁盘输入输出)《=====》硬件
3. Shell定义:只要能够操作应用程序的接口,狭义的shell指的是命令行方面的软件,包括bash,广义的shell则包括图形界面的软件
为何要学shell:
1. 命令行界面的shell支持所有distribution
2. 远程管理,命令行界面快
3. Linux的任督二脉
bash简称:Bourne Again SHell
shell命令存储于/etc/shells/...,shell有多种:sh, bash, ksh, tcsh, csh, zsh
bash shell 功能:
命令记忆能力(history),默认记忆功能达到1000个,记录在~/bash_history
命令与文件补全功能(tab多按几次就知道了)
命令别名设置功能(alias): ln='ls -al'
作业控制,前台,后台控制(job control, foreground, background)
脚本程序(shell script)
通配符(wildcard): ls -l /usr/bin/X*
bash shell 内置命令:type,用于查看是内置bash命令还是外部命令
type [-tpa] name
type ls
type cd
type -t ls
shell 的变量功能
变量的可变性与方便性
影响bash环境操作的变量:PATH, HOME, MAIL, SHELL
脚本程序设计(shell script)的好帮手
变量就是以一组文字或符号等,来替代一些设置或是一串保留的数据
变量的显示、设置:echo, unset
输出变量:echo $PATH 或echo ${PATH}
设置变量值:myname=Garin
变量定义规则:
1. 等号两边之间不能有空格
2. 变量名只能是英文字母与数字,但开头不能为数字
3. 若有空格,则使用双引号:双引号内可以使用变量
或单引号:单引号内不能使用变量(命名规则跟PHP字符串相似)
4. 可以使用转义字符"\",将特殊符号变为一般字符
5. 反单引号"`",提供其他命令提供的信息:
例如:取得内核版本:version=$(uname -r) 或version=`uname -r`
echo `version` /echo $version
6. 若变量需要修改,则可用"$变量名称"或${变量}累加内容
PATH="$PATH":/home/bin
7. 若该变量需要在其他子进程执行,则需要以export来使变量变成环境变量,例:export PATH
8. 通常大家的字符为系统默认变量,自行设置变量可以使用小写字符,方便判断
9. 取消变量的方法为使用"unset 变量名称"
unset myname
子进程:在目前这个shell情况下,去打开另一个新的shell,新的shell就是子进程,在一般状态下,父进程的自定义变量是无法在子进程内使用的,但是通过export将变量变成环境变量后,就能够在子进程下面应用了
例如:如何进入到你目前内核的模块目录:
cd /lib/modules/`uname -r`/kernal
cd /lib/modules/${uname -r}/kernal
环境变量的功能:
nev: 查看环境变量与学见环境变量说明
HOME: 可以直接cd去
SHELL: 目前使用的是哪个shell程序,默认/bin/bash
HISTSIZE: 历史命令条数
MAIL: 读取邮件信箱文件
PATH: 文件路径
LANG: 重要,语系数据,很多信息都会用到它,中文编码通常是zh_CN.gb2312或zh_CN.UTF-8
RANDOM: 在bash下随机数范围为0~32767,例如取得0~9之间的随机数:
declare -i number=$RANDOM*10/32767
echo $number
set查看所有变量(包含环境变量与自定义变量)
与目前shell操作接口有关的变量,通常会被设置为大写字母,以下为比较重要的环境变量:
PS1: 提示符的设置(登录进Linux后会显示的字符)
\d: 日期格式;\H: 完整的主机名;\h: 仅取主机第一个小数点之前的名称;\t: 显示时间为24小时格式;\T: 显示时间为12小时格式
\A: 显示时间格式24小时格式:HH:MM;\@: 显示时间,12小时,am/pm;\u:目前用户的帐户名称如root;\v: bash版本信息
\w: 完整的工作目录名称,主文件夹会以~替代;\W: 利用basename函数取得工作目录名称;\#: 执行的第几条命令
\$: 提示符,如果是root时,提示符为#,否则是$,
例如提示信息为:[root@www /home/dmtsai 16:50 #12]#
PS1='[\u@\h \w \A #\#]\$'
$(关于本shell的PID)
$本身也是个变量,这个代表的是目前这个shell的线程代号,即是所谓的PID(ProcessID), 用echo $$, 可显示PID号码
?(关于上个执行命令的回传码)
问号也是一个特殊的变量,这个变量是上一个执行的命令所回传的什,当一个命令执行后会有一个返回值,若命令执行成功,就会返回0, 若发生错误,则会返回错误码,打印上一个命令的错误码:echo $?
OSTYPE, HOSTYPE, MATCHTYPE:主机硬件与内核等级
export:自定义变量转成环境变量
自定义变量与环境变量的区别就是该变量是否会被子进程所继续引用,bash有子进程,子进程会继承父进程的环境变量,但不会继承环境变量
影响显示结果的语系变量:locale
查询linux到底支持多少语系:locale -a
语系文件放在/usr/lib/locale
系统默认语系定义在:/etc/sysconfig/i18n
变量的有效范围