Shell的环境和功能
Shell的概述
命令补全
命令历史
命名历史的概念:
命令历史是对与在命令行提示符下提交过的命令历史记录
命令历史是命令行操作的痕迹
命令历史有条目保存的数量限制
命令历史的查看:history
命名历史的清空:history –c
命名历史的引用:
使用键盘的上下键逐条调阅最近的命令历史
使用“!”符号调用前端字符匹配的最近使用过的命令
命令别名
命名别名的概念:
命令别名是原命令的昵称
命令别名是shell的一种功能,而非命令的符号连接
命令别名在命令行提交时将被自动的字符替换
命令别名的查看: alias
命名别名的设置: alias myls =’ls -a‘
通配符
通配符的概念:
通配符是代表字符通用匹配的一种支持系统程序支持的特殊符号
常用通配符的使用:
“*”通配符的使用
Eg:ls –l test.*
“?”通配符使用
Eg: ls –l test?.?
Eg: ls –l test.???
’[]“ 通配符的使用
Eg:ls –l test[0-9].txt
【
1、通配符是代表字符通用匹配的一种系统程序支持的特殊符号。
2、常用通配符有:*、?、[]
* 表示任意字符,可以是没有,也可以是多个;
?表示任一字符,只能表示一个字符;
[]表示范围中字符,例[1-9]为从1-9中任选一个。】
命令后台发送与作业控制
命令后台运行的概念
命令后台运行指命令脱离命令行交互程序的控制而独立运行
命令后台发送的使用:
在原有命令的末端使用“&”符号即可将命令发送值后台使用
命令作业控制的概念:
命令作业控制是指系统对于命令作业的某种任务安排
命令作业控制的操作:
使用jobs命令可以查看当前的后台作业任务
使用bg命令可以将当前命令作业切换到后台
使用fg 命令可以将最近的一个后台作业切换回前台
【
一、命令后台发送与作业控制
1、命令后台运行的概念:是指命令程序脱离命令行交互程序的控制而独立运行。
2、‘&’在命令的末尾加上&,可以将命令发送到后台,例 gedit &
二、作业控制的概念
是指系统对于命令作业的某种任务安排
三、作业控制的操作
1、jobs 可以查看当前后台运行的作业
2、bg 可以将当前命令作业切换到后台,缺省切换到后台挂起
3、fg 可以将最近的一个后台作业调回前台】
Shell变量
Shell变量的概念
Shell变量的概念
Shell变量是shell程序在内存中存储数据信息的容器
Shell变量的使用
Shell变量的设置
Eg: COLOR=red
Shell变量的引用
Eg: echo $ COLOR
Eg: echo ${ COLOR }
自定义变量
自定义变量的概述
自定义变量是用户自己命名的变量
自定义变量不得与系统命名变量同名
自定义变量的使用
自定义变量的设置
Eg:Day =Friday
自定义变量的引用
Eg:echo “Today is ${Day}”
环境变量
环境变量的概念:
环境变量是指 系统中用来存储环境信息数据的变量,通常系统配置初始提供
环境变量的使用
环境变量的使用方法和自定义变量一致,只是变量命名(大写)被约束
环境变量的导出和保存
用export命令可以将当前shell环境中的环境变量导出到子shell当中
环境变量可以保存在配置文件~/.bashrc中,供固话的长期使用
常用的环境变量
PATH变量
PS*变量
PATH变量的概念:
环境变量PATH存储系统命令的所在路径,通常为绝对路径
环境变量PATH提供了对于系统命令搜寻的遍历,意义重大
PATH变量的使用
Path变量的设置
Eg:PATH=/home:$PATH
Path变量的引用
Eg: echo $PATH
【
一、环境变量的概念:
系统储存环境信息数据的变量,通常系统配置初始提供
二、环境变量的使用:
使用方法与自定义变量一致,只是变量名被约束。
三、环境变量的导出和保存:
1、export:可以当前shell环境中的环境变量导出到子shell中
2、环境变量的配置文件在~/.bashrc中,供固话的长期使用。
四、PATH环境变量的概念:
1、环境变量PATH存储系统命令所在的路径,通常为绝对路径,环境变量PATH提供了对于系统命令的搜寻的便利,意义重大。
2、PATH变量的设置:PATH =/home/iotek/bin:$PATH
3、PATH变量的引用:echo $PATH
】
预定义变量
预定义变量的概念
预定义变量是由shell 程序提供的内置变量
预定义变量用来存储shell 程序运行过程中的状态信息
预定义变量无需设置,只能引用
预定义变量的使用
变量 $$存储当前进程的进程号信息
变量 $0 存储当前进程的进程名信息
变量 $? 存储当前命令的返回值信息
变量 $! 存储最近的一个后台进程的进程号信息
位置变量
位置变量的概念
位置变量是由shell 程序提供的变量,可用来引用传递给程序的参数
位置变量通过该程序参数在传递给程序时的位置顺序来引用
位置变量的使用
位置变量$1,$2,…….$9
位置变量的切取命令 shift
管道与重定向
标准设备文件
标准输入文件:stdin
标准输入的设备文件为 /dev/stdin
对应的文件描述符为 “0”
标准输出文件:stdout
标准输出的设备文件为:/dev/stdout
对应文件描述符为“1”
标准错误文件 stderr
标准错误的设备文件为 /dev/stderr
对应文件描述符为“2”
管道
管道的概念
管道是系统提供的供命令间传递新的设备
管道的信息传递是有前往后单项传递
管道仅将前一命令程序的标准输出传递给后一命令
管道的使用
Shell 中使用管道符“|”来进行管道操作
Eg:ps aux | grep “bash”
管道的级联
管道符允许被多级使用,即管道的级联
Eg:ps aux | grep “bash” | grep –v “grep”
重定向
重定向的概念:
重定向是指将原本关联输入或者输出到标准设备文件的信息重新定向到指定磁盘文件的举措
输出重定向的使用:
标准输出重定向
Eg:ls -l test.* > output.txt
Eg: ls –l test.*>>output.txt
标准出错重定向
Eg:ls –l text.* 2 >output.txt
Eg:ls –l text.* 2>>output.txt
输入重定向的使用
标准输入重定向
Eg:cat < output.txt
标准输入重定向之 here document技术
Eg:cat <<EOF
合并输出重定向的使用
合并重定向是指合并标准输出和标准错误的信息输出
使用合并重定向符“&”即可实现合并输出
Eg:ls –l test.* filenotfound&>output.txt
【
一 输入及合并重定向
输入重定向的符号:< 、<<
< 将后面的内容重定向前面的命令
<< Linux shell中Here Document技术;Here Document是一种特殊的重定向方式,作用是把两个标识符之前的内容传递给命令,作为输入参数。
二、合并输出重定向的使用
指的是将标准输出和标准错误输出的内容合并。使用合并重定向符‘&’即可实现合并输出
】
管道与重定向的应用
管道过滤信息的重定向输出
综合使用管道符与重定向符能实现命令使用的最大灵活性,以满足应用需求
利用重定向拷贝文件
综合使用输出和输入的重定向符,可以实现简单的cp命令功能
heredocument使用
heredocument输入重定向技术在实际工作中有广泛的应用
【一、 管道过滤信息的重定向输出
综合使用管道符和重定向符能实现命令的最大灵活性,以满足应用需求。
例:cat /etc/passwd | grep iotek > iotek.txt查看/etc/passwd文件内容,截取出其中包含iotek的一行,输出重定向到iotek.txt文件。
二、利用重定向符拷贝文件:
综合使用输入和输出的重定向符,可以实现简单的cp命令的功能
例:cat < iotek.txt > iotek2.txt 查看iotek.txt文件内容,并把显示结果重定向到iotek2.txt当中,实现文件内容的拷贝
三、Here Document
使用
此项技术在实际工作中有着广泛的应用。
】
Shell 脚本
脚本的概述
脚本的概念
脚本是指以解释执行方式的程序语句集合体
狭义的脚本即指脚本文件
脚本的用途
批量的顺序处理命令语句以实现命令应用需求
非交互式的命令使用方式可以提升命令执行的效率
脚本的使用
脚本文件的合法编写是脚本使用的程序基础
脚本文件的正确执行是脚本使用的运行实例
脚本的控制结构
脚本控制结构的概念
程序的控制结构使得程序语句的执行顺序能有条件的智能改变
控制结构有顺序结构,分支结构和循环结构
顺序结构的概念:
顺序结构是指按照语句的顺序从上至下依次执行
脚本的顺序结构,通常语句前后没有制约关系
分支结构:
分支结构根据条件判断的真假来选择执行某一分支的语句体
分支结构的实现方式:
&& || 符号级联
If- else语句
Case语句
循环结构
循环结构根据条件判断的真假来确定是否执行循环体内的语句
循环结构的实现方式:
while语句
until 语句
for-in 语句
【
一、循环结构的概念:
循环结构根据判断条件的真假来确定是否执行循环体内的语句
二、循环结构的实现方式:
1、while语句: 只要测试表达式条件为真,则while循环将一直运行。关键字"break"用来跳出循环。
实例:
#!/bin/bash
times=1 给变量times赋值
while [ -x $1 ] 当$1有执行权限为真,则执行循环
do 循环的内容
[ $times –ge 10 ] && break times大于等于10跳出
echo “the $times times Hello world ”
let times++ 让times的值做累加
done 结束
2、注意事项
1)shell脚本中变量无需声明,可以直接引用
2)–ge 大于等于,-le小于等于
3)break 必须要有break跳出,否则将陷入死循环。
4)let times++ 累加,没循环一次让times的值加1
3、until语句:只要测试表达式条件为假,则until循环将一直运行。关键字"break"用来跳出循环。
实例:
#!/bin/bash
times=1 给变量times赋值
until [ -x $1 ] 当$1有执行权限为真,则不执行循环
do 循环的内容
[ $times –ge 10 ] && break times大于等于10跳出
echo “the $times times Hello world ”
let times++ 让times的值做累加
done 结束
4、for-in语句:
实例:
#!/bin/bash
times=1 给变量times赋值
for Times in 1 2 3 4 5 6 分别执行当Times等于几的循环
do 循环的内容
echo “the $times times Hello world ”
let times++
done 结束
】
脚本的使用示例
【
一、脚本的程序需求:
1、从给定的自然数开始,循环10个数,皆为3的倍数
二、脚本的实现要求
1、程序设计包含输入的友好提示和对输入合法性的验证。
三、脚本分析
1、输出的是什么,10个数,分别为3的倍数;输入的是什么,任意一个自然数;知道了输出要求和输入之后,怎么实现呢,这就我们需要处理的;首先接受输入,检查友好的性与合法性,如何不合法直接退出,合法的话继续执行,因为选取的是3的倍数,所以可以判断都能被3整除,那么余数一定是0,这里要定义的变量:输入的自然数Input,循环的次数Times,并且Times小于等于10,输出10个可以被3整除的数。
】【
脚本编写
#!/bin/bash 固定格式
#输出10个被3整除的自然数 脚本要实现的目的
#Input
提示用户输入,并输入的值交给变量Input
read -p "Input a number:" Input
if [ $Input -gt 0 ]判断值是否为自然数,条件:自然数大于0。
then
echo "true" 如何是自然数,输出正确
else
echo "false" 如果不是自然数,输出false
exit 并退出,
fi 判断结束,和if对应
#Output
Times=0 给循环的次数,赋0值
while [ $Times -lt 10 ] 条件:Times小于等于10 “–lt:=<”
do
let Num=$Input%3 用输入的数%3,得出的值Num(余数)
if [ $Num -eq 0 ] 判断Num的值是否为0.“-eq :=”
then echo "$Input" 为0则输出该自然数
let Times++ 让Times做累加
fi
let Input++ 让输入的值做累加
done】
【
一、脚本的概念:
脚本是指以解释执行方式的程序语句集合体,狭义的脚本即指脚本文件
二、脚本的用途:
批量的顺序处理命令语句以实现命令应用需求,非交互式的命令使用方式可以提升命令的执行效率。
三、脚本的使用:
脚本文件的合法编写是脚本f使用的程序基础,脚本文件的正确执行是脚本使用的运行实例。
四、脚本的控制结构的概念:
程序的控制结构使得程序语句的执行顺序能有条件;控制结构包括顺序结构、分支结构和循环结构。
五、顺序结构的概念:
按照语句的顺序从上至下一次执行,脚本中的顺序结构,通常语句没有前后制约关系。
六、简单脚本书写:
vim iotek.sh 【shell脚本习惯以.sh结尾】
#!/bin/bash 固定格式,必须写在文件第一行,声明脚本解释器。
pwd 执行的命令
echo “hello iotek.”依次书写命令
七、命令的执行方式:
首先要给脚本文件添加可执行权限,chmod u+x iotek.sh
./iotek.sh 运行脚本文件】
脚本的调试运行与排错
1、 sh 脚本调试命令
1) usage: sh [选项] filename.sh
2)–x 选项可用来跟踪脚本的执行,是调试shell脚本的强有力工具。“-x”选项使shell在执行脚本的过程中把它实际执行的每一个命令行显示出来,并且在行首显示一个"+"号。 "+"号后面显示的是经过了变量替换之后的命令行的内容,有助于分析实际执行的是什么命令。 “-x”选项使用起来简单方便,可以轻松对付大多数的shell调试任务,应把其当作首选的调试手段。
3)–n 可用于测试shell脚本是否存在语法错误,但不会实际执行命令。在shell脚本编写完成之后,实际执行之前,首先使用“-n”选项来测试脚本是否存在语法错误是一个很好的习惯。因为某些shell脚本在执行时会对系统环境产生影响,比如生成或移动文件等,如果在实际执行才发现语法错误,您不得不手工做一些系统环境的恢复工作才能继续测试这个脚本。
Shell脚本的高级主题
Shell函数
Shell函数的两种表达形式
表达形态一:函数名()
Eg:hello(){echo “hello xht”}
表达形态二:function 函数名()
Eg:function nihao(){ echo “hello xht”}
Shell函数的使用:
Shell函数使用时只需书写函数名即可
Eg:hello
Eg:nihao
实例:
#!/bin/bash 固定格式
iotek(){
echo “Hello xht”
} 函数表达形态1
function hello(){
echo “Hello World”
} 函数表达形态2
iotek 使用函数iotek
hello 使用函数hello
三、shell函数的参数传递
1、shell脚本的函数是依靠位置变量来传递
2、shell函数传递时按顺序写在函数名后面即可。
实例:
#!/bin/bash
iotek(){
echo “$1 Hello xht”
} 函数表达形式,$1指的是引用函数后的的第一个参数
xht Adam 函数,Adam就是$1引用的函数
Shell变量的替换
缺省替换: ${Var :-value}
若Var变量未被设置,则临时设值为value
Eg:${Day:-Sun}
强制替换:${Var :+value}
若Var 变量已被设置,则临时设值为 value
Eg:${Day:+Mon}
缺省赋值替换:${Var:=value};
若Var的值未被设置,则永久设置为vlaue
缺省错误替换:${Var:?string};
若Var的值未被设置,则错误输出为string
单次匹配替换:${Var:/pattern/string};
若Var的变量pettern存在,则单次替换输出为string
全局匹配替换:${Var://pattern/string};
若Var的变量多次匹配pattern,则全部替换输出为string