1.shell 是什么?
shell 壳,Linux借鉴此意思,shell用于保护内核(kernel)
从用户角度来看:shell是用户与操作系统沟通的桥梁
从程序员的角度看:shell本身就是用C语言编写的程序
shell担任翻译的角色,将用户输入的各种命令翻译成Linux能够识别的指令,称为命令解释器
shell还是一门编程语言
2.shell类型
sh bash ksh csh kcsh ...
查看当前系统上的shell
cat /etc/shells
查看当前使用的shell
echo $SHELL
3.bash的特点
1. 命令编辑
记忆你使用过的指令,上下键可以找到之前使用的命令
history查看历史指令
vim .bash_history 历史指令就保存在该文件中,默认2000条
vim .bashrc 一般在18、19、20行,去修改histfilesize
!编号
!指令
2.补全功能(tab)
指令补全
文件名补全
3.命令别名(alias)设定功能
设定别名:
alias lll='ls --Color=auto'
alias rm='rm -i'
取消别名
unalias 别名
4.作业控制、前台 背台
&
jobs
fg n[编号]
ctrl+z结束作业
5.shell script
.bat 批处理文件
Linux中的shell功能更强大
4.管道 |
xxx | xxx | xxxx ...
把上一个命令的输出作来下一个命令的输入
ps | sort | more
5.重定向 > <
简单说,就是将目前的所得数据转存在其它地方
>>追加 >清空
stdin 0<
stdout 1> 从哦名
stderr 2>
make 2> /dev/null //把错误信息直接输出到空设备文件中(直接扔掉)
6.shell编程:
#!开头的行,表示用来解释该脚本的程序
其它以#号开头的行都是注释
echo 相当于printf
变量
条件
程序控制
函数
-------------------------------------------
7.变量
1.环境变量
永久的
临时的
2.自定义变量
3.特殊变量
$? 上一条指令的退出码
小结:
设置变量的规则:
1.变量名与变量值以等号(=)连接
2.等号两边绝对不能有空格
3.变量名只能是字母和数字,其中,数字不能用于开头
4.若变量值中含有空格,需要用引号把内容结合起来
需要注意单引号与双引号的区别
5.可以通过在变量名前面加一个$符号来访问该变量的值
6.通常系统预设的环境变量都是大写字符,自定义变量建议用小字字母,方便判断
8.条件
测试条件为真或为假
能够测试 字符串、算术表达式、文件
测试字符串
test
string1 = string2 相等则为真,否则为假
string1 != string2 不等则为真,否则为假
-n string 不为空,则结果为真
-z string 为空,则结果为真
测试算术表达式
expression1 -eq expression2 等于
-ne 不等于
-gt 大于
-lt 小于从哦名
-ge 大于等于
-le 小于等于
!expression 如果表达式为真,则结果为假,反之,同理
expr 1 + 3
expr用于求表达式的值
测文件
-d file 是目录则为真
-f file 是普通文件则为真
-e file 存在则为真
-r file
-w file
-x file
更多信息,请查看 man test
9.流程控制
1.if语句的语法
if test 条件
then
语句
elif test 条件
then
语句
else
语句
fi
2.for语句的语法
for 变量 in 值1 值2 ...
do
语句
done
练习:
写一个脚本,寻找、打印用户目录下的所有的目录文件
3.while语句的语法
while 条件
do
语句
done
练习:
求1-100的和
5050
4.case语句的语法
case 变量 in
匹配模式1)语句;;
匹配模式2)语句;;
...
esac
5.break和continue
参考C语言的用法
10.EL ${}
可以用${}分别替换到不的值
file=/home/csgec/a.txt
var=${file#*/} 删除第一个 “/” 及其左边的所有字符
var-->home/csgec/a.txt
var=${file##*/} 删除最后一个“/”及其左边的所有字符
a.txt
var=${file%/*} 删除最后一个“/”及其右边的所有字符
/home/csgec
var=${file%%/*} 删除第一个“/”及其右边的所有字符
var=${file:0:5} /home 提取最左边的5个字符
11.函数
要定义一个函数,只要写出它的名字,然后接一对空括号,再把函数体放到一对大括号中
func()
{
echo "hello"
}
$0 $1 $2...
$# 参数个数,不包括脚本名
$* 所有的参数 不包括脚本名