shell脚本命令集合,类似于操作系统中的批处理的方式,一句一句的运行shell命令
一、shell的分类
1、Bourne shell(sh)
,是 UNIX 最初使用的 shell,并且在每种 UNIX 上都可以使用, 在 shell 编程方面相当优秀,但在处理与用户的交互方面做得不如其他几种shell。
2、C-shell(csh)
是一种比Bourne shell更适于编程的shell ,它的语法与C 语言很相似。 Linux 为喜欢使用C shell的人提供了Tcsh 。Tcsh 是C shell的一个扩展版本。Tcsh 包括命令行编辑、可编程单词补全、拼写校正、历史命令替换、作业控制和类似C 语言的语法,它不仅和Bash shell是提示符兼容,而且还提供比Bash shell更多的提示符参数。
3、Bash
Linux 操作系统缺省的 shell 是Bourne Again shell,它是 Bourne shell 的扩展,简称 Bash,与 Bourne shell 完全向后兼容,并且在Bourne shell 的基础上增加、增强了很多特性。Bash放在/bin/bash中,它有许多特色,可以提供如命令补全、命令编辑和命令历史表等功能,它还包含了很多 C shell 和 Korn shell 中的优点,有灵活和强大的编程接口,同时又有很友好的用户界面。
4、Korn shell
集合了C shell和Bourne shell的优点并且和Bourne shell完全兼容。Linux 系统提供了pdksh (ksh 的扩展),它支持任务控制,可以在命令行上挂起、后台执行、唤醒或终止程序
二、shell脚本运行语法
sh 【脚本名】 参数 #运行脚本文件
可以将shell文件放入/bin目录,直接使用文件名(现在是命令)执行文件。
例如:在teshell文件中写入
ls -al
pwd
who
运行文件
sh teshell
结果
total 52
dr-xr-x---. 6 root root 252 Dec 6 19:02 .
dr-xr-xr-x. 17 root root 256 Nov 27 10:34 ..
-rw------- 1 root root 5876 Nov 29 14:59 .bash_history
-rw-r--r--. 1 root root 18 May 11 2019 .bash_logout
-rw-r--r--. 1 root root 176 May 11 2019 .bash_profile
-rw-r--r--. 1 root root 176 May 11 2019 .bashrc
drwx------ 3 root root 17 Aug 24 14:34 .cache
-rw-r--r-- 1 root root 2212 Nov 29 10:19 cal2020.txt
-rw-r--r-- 1 root root 12288 Nov 29 11:12 .cal2020.txt.swp
-rw-r--r--. 1 root root 100 May 11 2019 .cshrc
drwxr-xr-x 6 root root 70 Nov 22 17:30 .esmtp_queue
drwxr-xr-x 2 root root 22 Aug 24 14:34 .pip
-rw-r--r-- 1 root root 206 Oct 30 17:34 .pydistutils.cfg
drwx------ 2 root root 29 Aug 24 06:34 .ssh
-rw-r--r--. 1 root root 129 May 11 2019 .tcshrc
-rw-r--r-- 1 root root 15 Dec 6 19:02 teshell
/root
root pts/0 2020-12-06 19:01 (182.106.212.136)
为文件添加运行权限
chmod a+x teshell
就可以直接运行文件
./teshell
如果放到/bin或者/usr/bin就可以直接使用命令
teshell
三、shell环境变量
shell的提示符分类
'$'第一提示符
''换行
'>'第二提示符
$ps1显示ps1变量的值
$提示符可被更改
1、环境变量的优先顺序
先读公共环境变量(/etc/profile),再读用户环境(/home/username/.bash_profile,username为登录的用户名)。环境变量一般大写,系统启动后自动加载。
(1)可写的环境变量
用户可以通过修改自己的启动文件".bash_profile"中的部分变量或所有变量值来钉子自己的运行环境
如:HOME,MAIL,PATH,PS1,PWD,TERM
(2)只读的shell环境变量
只读环境变量,特殊环境变量和位置参数,特殊的环境便来你给用户不能重新设置。
- $0-9一共10个参数
- $0 shell程序名
- $* 所有命令行的参数值
- $# 命令行参数总数
- $$ 进程ID
- $? 最后执行的一条命令的退出态返回0代表成功,非0代表失败
- $! 在后台运行的最后一个进程的ID
在执行sh文件时传入位置参数
位置参数:在命令行传递给shell脚本的参数
输出位置参数
在文件ptest中存入以下内容
echo $1 $2 $3 $3 $5 $6 $7 $8 $9 $0
运行
sh ptest 1 2 3 4 5 6 7 8 9 10
结果
1 2 3 3 5 6 7 8 9 ptest
sh ptest -参数 #参数会传递给对应$0-9
echo $(($1/$2))
echo $1 $2 $0
也可以通过set在文件中设置参数
set 赋值传给$1 $2
set a b #在脚本文件中赋值,
$0代表文件本身程序名
超过9个参数使用shift命令 再执行一次命令 未带参数默认为1,shift 1,每次把位置参数左移一位
修改ptest的内容
echo $1 $2 $3 $3 $5 $6 $7 $8 $9 $0
shift 3
echo $1 $2 $3 $3 $5 $6 $7 $8 $9 $0
shift 4
echo $1 $2 $3 $3 $5 $6 $7 $8 $9 $0
运行文件
sh ptest 1 2 3 4 5 6 7 8 9 10
结果:
1 2 3 3 5 6 7 8 9 ptest
4 5 6 6 8 9 10 ptest
8 9 10 10 ptest
shell变量赋值
变量名=值/字符串
使用变量名:$变量名
变量不需要声明
$name=wan #在加工本文件中添加
echo $name
如果变量有空格需要用双引号括起来
变量可迭代
A=
B
B
=
B B=
BB=C C=hello #可以得到A=hello
变量值是长字符串,需要引用变量值用{}把变量括起来
dir=/home/user1/
echo ${dir}m1.c
变量释放
unset
通配符
(与正则表达式相似)
shell编程所用的特殊字符
反引号 pwd
使用命令pwd命令
ls n* 可以匹配所有的n开头的文件
ls *w 可以匹配w结尾的文件
ne? 问号可以匹配多个字符
?ne?
ls [sdeefgnx]e[tw]
ls [a-zA-Z]tes[1-5]
ls [!2]*[25] #其中!表示非的意思
单引号 字符输出
双引号 字符输出
shell中命令执行顺序
顺序执行;
command 1;command2 #执行完1再执行2
逻辑与&&
command 1 && command2 #先执行1,1成功了再执行2
逻辑或||
command 1 || command2 #先执行1,1不成功了再执行2,1成功不运行2
注释,转义
注释符#
反斜线\ 转义字符