一、shell概述
1、介绍与功能
(1)shell是命令解释器,是用户与内核交互的图形化界面
(2)shell是一个功能强大的编程语言,易编写、易调试、灵活性强。在shell中可以直接调用linux中的命令。
2、分类
Shell的两种主要语法类型有Bourne和C,这两注语法彼此不兼容。
Bourne家族主要包括:sh、ksh、Bash、psh、zsh;
C家族主要包括:csh、tcsh。
注:主流shell是Bash。
3、Linux中支持的shell
/etc/shells文件中有Linux默认支持的shell类型
二、shell脚本的执行方式(shell脚本是怎么运行的?)
1、命令:echo 选项 内容
-e 支持反斜杠\控制的字符转换
2、第一个脚本
vi hello.sh
开始写脚本:
#!/bin/bash //此句话的作用是:说明hello.sh是一个Bash脚本程序
echo -e "Hello World!\n"
保存退出:wq
3、执行脚本
(方法1)修改脚本的权限755
chmod 755 hello.sh
./hello.sh
(方法2)直接用Bash执行
bash hello.sh
注解:
安装dos2unix yum -y install dos2unix
三、bash的基本功能
1、history 选项 历史命令保存文件
-c 清空所有的命令
-w 把缓存中的历史命令写入到历史命令保存文件~/.bash_history
注:默认保存1000条历史命令,可以在环境变量配置文件/etc/profile中修改。
2、历史和文件补全(Tab键)
3、快捷键
Ctrl + a 移动光标到行首
Ctrl + e 移动光标到行尾
Ctrl + c 强制终止
Ctrl + l 清屏
Ctrl + u 删除/剪切光标之前的行内容
Ctrl + k 删除/剪切光标之后的行内容
Ctrl + y 粘贴
4、命令的别名(给命令起了一个小名)
alias 查看别名
alias vi = "vim"
注1:执行命令顺序优先级:绝对路径 > 别名 > Bash内部命令 > 环境变量$PATH
注2:让别名永久生效
vi /root/.bashrc
删除别名unalias 别名
5、输入输出重定向
【标准输入、输出】
输出重定向 > 、 >>
输入重定向 < 、<<
命令: wc 选项 文件名
选项 -c 统计字节数
-w 统计单词数
-l 统计行数
例:
wc -l < oldboy.txt 把文件oldboy.txt作为命令wc -l的输入
" 命令 << " 的用法更加少见,见下图:
6、多命令顺序执行
;
&&
||
dd命令:主要用于磁盘复制
dd if=输入文件 of=输出文件 bs=字节数 count=个数
if=输入文件 指定源文件或源设备
of=输出文件 指定目标文件或目标设备
bs=字节数 指定一次输入或输出多少个字节,即一个数据块
count=个数 指定输入或输出多少个数据块
例,见下图:
7、管道符 |
命令1 | 命令2
解释:命令1的结果作为命令2的输入
grep 选项 文件/目录
选项:
-v 反向查找
-n 输出行号
-i 忽略大小写
8、通配符和其它特殊符号
$符号:
可以调用变量的值。如 name=SC; echo $name;
单引号''、双引号""的相同点、不同点:
相同点:引号中都可以包含字符串,为了把字符串当做一个整体来看待
不同点:单引号中的内容,会当做本身来看待,特殊字符在单引号中会失去含义; 双引号中的特殊符号不会失去特殊含义。
例,见下图:
反引号`` 与 $() :会告诉系统,反引号中的内容是系统命令
abc=`date`
echo $abc
四、bash的变量
变量设置规则
(1)在Bash中,默认情况下变量类型是“字符串”,如果要进行数值运算,要转换成“数值”类型。
(2)如果把变量的结果作为变量值赋值给变量,则用下面的格式:$(变量名)或`变量名`
(3)变量的叠加:格式-- "$变量名" 或者 ${变量名}
(4)变量赋值时用等号连接,中间不能有空格;若变量的值中间有空格,要用单引号或者双引号
变量分类:
1、用户自定义的变量:举例子说明
name=jawee 定义并初始化变量
echo $name 变量的调用
name=guo"$name" 或 name=guo${name} 变量叠加
echo $name 调用本地变量
set 查看所有的变量
unset 变量名 :删除本地变量
本地变量和环境变量的区别:作用域的大小--->用户自定义变量只在当前shell中生效;而环境变量在当前shell和子shell中生效,如果把环境变量写入配置文件,那么会永久生效。
2、环境变量(一部分是系统自己定义好的,另外一部分也可以自己定义)
export age=18 定义环境变量用export声明
export name 把上面的本地变量转为环境变量
echo $age enho $name 调用环境变量
env 查询环境变量
unset 删除环境变量
系统常见的2个环境变量:
(1)PATH 系统查询命令的路径
(2)PS1 定义系统提示符的变量,看下图:
3、位置参数变量
①$n: n表示的是数字,0表示脚本的名称,1-9用$9表示,10用${10}表示,例子:
vim add.sh 编辑一个加法脚本
#!/bin/bash
num1=$1
num2=$2
sum=$(($num1+$num2))
echo "sum = num1+num2 = $sum"
执行脚本:
chmod 755 add.sh
./add.sh 100 1
②$#:返回参数的总个数
③$*与$@,相同点:都表示所有参数; 不同点:
$*:把参数看做一个整体
$@:把参数独立看待
举例子:
vim canshu.sh
#!/bin/bash
for i in "$*"
do
echo $i
done
for y in "$@"
do
echo $y
done
:wq
chmod 755 canshu.sh
./canshu.sh
4、预定义变量
①$? : 最后一次执行命令的返回状态:如果正确执行,返回为0;如果不正确执行,返回非0。
用于:&& || 判断两边的执行结果是否正确
②$$ : 当前进程的进程号PID
③$! : 后台运行最后一个进程的进程号PID
5、接受键盘输入:read
read 选项 变量名
选项:
-p 在等待read输入时,输出提示信息
-t 指定等待时间
-n read命令只接受指定的字符数,就会执行
-s 隐藏输入的数据,适合保密
例:
read -p "please input name:" -t 100 -n 10 -s name
echo $name
**数值运算与运算符**
数值运算符号:+-*/等
declare 声明变量的类型
declare [+-] [选项] [变量名]
- 设定变量类型
+ 取消变量类型
-i 设定为整数类型
-x 设置为环境变量
-p 显示变量类型
例:
a=1
b=2
几种方式:
c=$a+$b 输出结果:1+2
d=$(($a+$b)) 输出结果:3
f=$[$a+$b] 输出结果:3
e=$(expr $a + $b) 输出结果:3 注:运算符+两边的空格不能省略
**变量测试与内容替换**
环境变量配置文件(简介和作用)
sorce命令:
sorce 配置文件 或 . 配置文件 作用:让修改完的配置文件不用注销重启直接生效
系统中有下面一组环境变量配置文件:
/etc/profile
/etc/profile.d/*sh
~/.bash_profile
~/.bashrc
/etc/bashrc
注:/etc/的环境变量配置文件是系统中所有用户都生效,~/的环境变量配置文件只针对于某个用户生效(~/家目录)
注:环境变量可以写在上面的配置文件中,写在后面的配置文件中会覆盖前面的配置文件中的环境变量,除非用变量叠加。
/etc/profile 登陆的用户
/etc/bashrc 不登录的用户
其他配置文件和登录信息
注销时生效的环境变量配置文件 ~/.bash_logout
历史命令配置文件 ~/bash_history
Shell登录信息