Shell 脚本
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
Shell 脚本(shell script),是一种为 shell 编写的脚本程序。
业界所说的 shell 通常都是指 shell 脚本,但读者朋友要知道,shell 和 shell script 是两个不同的概念。
由于习惯的原因,简洁起见,本文出现的 “shell” 都是指 shell 脚本编程,不是指开发 shell 自身。
shell的功能
命令解释器 负责人机交互 也是一种程序设计语言 shell perl python。
shell的类型
bash是redhat主流的shell类型
bash
[root@client Desktop]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh
bash的特性
1.支持历史记录
history 查看历史记录
历史命令
!341 直接执行第341条记录
alt . 上面操作的最右边的一个参数 !$
!c 执行历史记录中最新有c条目的操作
上下方向键可以翻动历史记录
history -c 删除历史记录
历史记录的条数
1000
设置历史记录的条数
#vim /etc/profile
HISTSIZE=1000
2.命令和文件补全功能tab键
3.支持快捷键
ctrl l 清屏
ctrl a 移动行首
ctrl e 移动行尾
ctrl u 删除光标所在位置之前的内容
ctrl k 删除光标所在位置之后的内容
ctrl c 中断
ctrl d 正常结束
4.别名
查看
#alias
设置
#alias a=‘init 0’
vim ~/.bashrc 对当前用户生效
取消
unalias a
5.支持定义环境变量
6.进程前后台
7.通配符
[]
?
*
!
{}
8.管道 输出输入重定向
9.命令排序
; ls /tmp ;cat /etc/passwd 同时执行两条命令 不具备逻辑判断
&& 具备逻辑判断 逻辑与
#lS /tmp && ls /tmp &&前面命令执行不成功后面命令无法执行
#ls /tmp && LS /tmp &&前面命令执行成功后面命令不成功只执行前面命令
|| 逻辑或
#cd /aa || a.txt ||前面命令执行不成功,执行后面命令
-bash: cd: /aa: 没有那个文件或目录
-rw-r–r-- 1 root root 21 4月 26 12:05 a.txt
#cd /tmp || ll a.txt ||前面命令执行成功,不执行后面命令
查看/etc/pass文件,如果这个文件存在,提示文件已存在,不存在提示文件不存在
[root@client ~]# cat /etc/pass &>/dev/null && echo “yes” ||echo “no”
“” 弱引 软引 会翻译引号内的内容(如果有变量可以取出变量的值)
[root@client ~]# echo “变量a的值为$a”
变量a的值为16
‘’ 强引 硬引 不会翻译引号内的内容(有变量也不取值)
[root@client ~]# echo '变量a的值为 a ′ 变 量 a 的 值 为 a' 变量a的值为 a′变量a的值为a
`` 会翻译内部命令并将结果交给外部命令去使用
[root@client ~]# echo "today is date +%F
"
today is 2017-04-26
[root@client ~]# rpm -qf which cat
coreutils-8.4-31.el6.x86_64
[root@client ~]# tar czf /tmp/date +%F
etc.tar.gz /etc/
[root@client ~]# ls /tmp
2017-04-26etc.tar.gz
\ 转义字符
\n 换行符
\t tab键
[root@client ~]# echo -e “hello\nworld”
hello
world
[root@client ~]# echo -e “hello\tworld”
hello world
[root@client ~]# echo -e ‘atb’
atb
[root@client ~]# echo -e ‘a\tb’
a b
[root@client ~]# echo -e ‘anb’
anb
[root@client ~]# echo -e ‘a\nb’
a
b
echo -n 取消换行
创建文件的几种方法
[root@client ~]# touch a.txt
[root@client ~]# vim b.txt
[root@client ~]# cat > c.txt
[root@client ~]# >d.txt
shell的变量
常量 固定的字符或字符串 不能变 所有被赋值的字符串都被称为常量
=赋值符号
变量 值可以发生变化 y=123 把=右边的内容赋值到等号左边
变量名称:只能由字母数字和下划线组成 不能以数字开头 见名知意
变量的类型:
1.自定义变量
2.环境变量
3.位置变量
4.特殊变量 预定义变量
1.自定义变量 局部变量
定义变量?
变量名=变量的内容
#a=80
只对当前shell生效
子shell不生效
如何引用变量?
#echo $a
查看所有变量(包含自定义变量和环境变量)
#set
取消变量?
#unset a
2.环境变量 全局变量
用来指定操作系统运行环境的一些参数
在父shell里面设置的变量在他的子shell里面生效的话,说明这个变量拥有继承性,我们可以把拥有继承性的变量称为环境变量,环境变量都可以在env查看到
查看环境变量
env
常用的环境变量
HOSTNAME=client.uplooking.com //表示当前主机名
SHELL=/bin/bash //表示当前shell的类型
HISTSIZE=1000 //表示当前历史记录的条数
USER=root //表示当前登陆的用户
PWD=/root //表示当前路径
LANG=zh_CN.UTF-8 //表示当前使用的语言
HOME=/root //表示当前用户的家目录
PS1=’[\u@\h \W]$ ’ //表示一级提示符
PS2=’> ’ //表示二级提示符
UID=0 //表示当前用