shell脚本入门 —— 符号篇
程序员文章站
2022-07-12 12:31:05
...
一、什么是shell
Shell就是一个命令行解释器,它的作用是解释执行用户的命令,用户输入一条命令,Shell就解释执行一条,这种方式称为交互式(Interactive)。
Shell还有一种执行命令的方式称为批处理(Batch),用户事先写一 个Shell脚本(Script),其中有很多条命令,让Shell一次把这些命令执行完,而不必一条一条地敲 命令。Shell脚本和编程语言很相似,也有变量和流程控制语句,包括循环和分支。但Shell脚本是解释执行的,不需要编译,Shell程序从脚本中一行一行读取并执行这些命令,相当于一个用户把脚本中的命令一行一行敲到Shell提示符下执行。作为程序设计语言,它虽然不是 Linux系统内核的一部分,但它调用了系统内核的大部分功能来执行程序、创建文档并以并行的方式协调各个程序的运行。
linux系统中常见的shell有:sh、csh、tcsh、bash
使用命令: cat /etc/shells 可以查看当前系统支持的bash
二、shell执行脚本
1.建立一个shell脚本
vim testshell.sh
#!/bin/bash
echo "hallo world"
shell脚本通常以“ .sh”结尾,并不是系统规定,而是一种业界规范
2.shell脚本执行方式
//第一种执行方式:
[root@initiator Desktop]# sh testshell.sh
//第二种执行方式:
[root@initiator Desktop]# chmod +x testshell.sh
[root@initiator Desktop]# ./testshell.sh
3.脚本编写规范
脚本中应该有脚本的说明信息,
下面的例子是vim自动添加脚本说明
vim /etc/vimrc
67 map <F4> ms:call AddTile()<cr>'s ##设定快捷键为F4
68 function AddTile() ##设定函数
69 call append(0,"#!/bin/bash")
70 call append(1,"###############################")
71 call append(2,"#Author :Lee")
72 call append(3,"#Email :aaa@qq.com")
73 call append(4,"#Version :")
74 call append(5,"#Creat_date :".strftime("%y-%m-%d"))
75 call append(6,"#Description :")
76 call append(7,"###############################")
77 endfunction
三、shell变量
shell变量不需要进行任何声明,直接定义即可,因为shell变量的值实际上都是字符串(对于没有定义的变量默认是一个空串)。定义的时候shell变量由大写字母加下划线组成,并且定义的时候等号两边不能存在空格,否则会被认为是命令!
1.shell变量的种类:
环境变量:shell进程的环境变量只在当前环境生效,但可以从当前shell进程传给fork出来的子进程,当前环境关闭则变量失效。
本地变量:只针对配置过的用户生效,其他用户无法使用
系统变量:
利用printenv可以显示当前shell进程的环境变量;利用set命令可以显示当前shell进程中的定义的所有变量(包括环境变量和本地变量)和函数。
一个shell变量定义后仅存在于当前Shell进程,是一个本地变量。用export命令可以把本地变量导出为环境变量。用unset命令可以删除已定义的环境变量或本地变量。
//分步 先定义后导出
COUNT=5
export COUNT
//一步完成定义和导出环境变量
export COUNT=5
//删除已经定义的环境变量
unset COUNT
变量引用:
引用shell变量要用到$符号,加{}可以防止歧义。
例如:
COUNT=5
echo $COUNT
echo ${COUNT}911
四、通配符 Globbing、命令代换、单引号、双引号
1.常见的通配符:
// * : 匹配0个或多个任意字符
// ? : 匹配一个任意字符
// [若干字符] : 匹配方括号中任意一个字符的一次出现
2.命令代换:
反引号`` 或者 $()
shell会先执行反引号或$()中的命令,将结果代换到当前命令行中!
反引号和$()的区别:
反引号本身就对\进行了转义,保留了本身意思,如果我们想在反引号中起到\的特殊意义,我们必须使用2个\来进行表示。
反引号中: \\ = \
$()中:\ = \
算数代换:$(())
例如:将10-2的结果赋给SUB,并显示本地变量SUB
SUB=$((10-2))
echo $SUB
3.单引号和双引号
Shell脚本中的单引号和双引号一样都是字符串的界定符,单引号用于保持引号内所有字符的字面值,而双引号有些情况则特殊。如果字符串中有特殊字符需要处理时就用双引号。
注:单引号标注的字符中不能再出现单引号。
举个例子:
#!/bin/bash
echo '\\'
echo "\\"
echo '`date`'
echo "`date`"
五、diff命令
diff命令在最简单的情况下,比较给定的两个文件的不同。如果使用“-”代替“文件”参数,则要比较的内容将来自标准输入。diff命令是以逐行的方式,比较文本文件的异同处。如果该命令指定进行目录的比较,则将会比较该目录中具有相同文件名的文件,而不会对其子目录文件进行任何比较操作。
diff(选项)(参数)
[num1,num2][a|c|d][num3,num4]
a ##添加
c ##改变
d ##删除
num1,num2 ##表示在文件1中的行号
num3,num4 ##表示在文件2中的行号
以上说明指定了两个文件中不同处的行号及其相应的操作。在输出形式中,每一行后面将跟随受到影响的若干行。其中,以<开始的行属于文件1,以>开始的行属于文件2。
diff常用于打补丁,序言安装patch
yum install patch -y ##安装补丁软件
diff file file1>file.path ##生成补丁文件file.path
patch file file.path ##给file打补丁
##或者
patch -b file file.path ##-b表示备份源文件为file.orig
下一篇: Shell脚本之awk篇