Linux shell脚本入门学习
Linux shell脚本入门学习
Shell是介于使用者和UNIX/Linux操作系统之核心程序间的一个接口。为了对用户屏蔽内核的复杂性,也为了保护内核以免用户误操作造成损害,在内核的周围建了一个外壳(Shell)。用户想shell提出请求,shell解释并将请求传给内核。
Shell是一种解释型的程序设计语言,使用广泛的有标准的Bourne shell(sh)、Korn Shell(ksh)、C shell(csh)、Bourne Again Shell(bash)等,查看当前环境所用shell:echo $SHELL
1.综述
1.1 开头
程序必须以下面的行开始(必须房子在文件的第一行):
#!/bin/sh
#!/bin/bash
符号#!用来通知系统用何解释器执行此脚本。
当编辑好脚本时,如果要执行该脚本,还必须使其可执行,给脚本添加可执行权限:
chmod +x filename 运行脚本 filename 或者 ./filename
1.2 注释
在进行shell编程时,以#开头的句子表示注释,直到这一行的结束。
1.3 Linux黑洞
/dev/null是一个虚设的设备,俗称“Linux黑洞”,任何对/dev/null的写入都会成功,但数据会消失的无影无踪,没有任何反馈。所以经常把不想在屏幕上显示的信息全部送到/dev/null中。它还可以用来清空文件的内容:cat /dev/null > filename
2. 命令
◆Shell脚本调试
sh -x filename.sh 可以使用户跟踪脚本的执行,此时shell对脚本中的每条命令是先执行替换然后显示,在执行它。Shell显示脚本中的行时,会在行首添加个加号“+”。
sh -n filename.sh 对脚本进行语法检查,但不执行脚本。
sh -v filename.sh 在执行脚本之前,按输入的原样打印脚本中的各行,打印一行执行一行。
◆在脚本中使用set开启调试选项:
set -x 显示由shell执行的命令以及参数
set -v 显示由shell读入的命令行
set -n 读取命令但不执行他们,用于语法检查
关闭调试选项:set +x/+v/+n
2.2 用户管理
◆新建用户 useradd UserName 新建用户后,会在/home目录下建立一个以UserName命名的文件夹,用户每次登陆时会自动定位到该文件夹下。
◆为用户添加密码 passwd UserName
◆删除用户 userdel UserName 使用 –p选项可以删除用户目录下的文件及与用户相关联的其他文件。
◆用户身份 whoami
查看登录用户 who -a 显示所有用户的所有信息
-H 显示列标题
◆查看用户的操作 w
◆用户间的切换 su UserName
2.3 目录管理
◆创建目录 mkdir DirecName
◆删除目录 rmdir DirecName
◆显示工作目录 pwd
◆显示目录内容 ls -a 显示当前目录下的所有文件,包括以.开头的文件
-l 以长列表的形式显示文件列表
◆改变当前目录 cd .. 进入上一级目录
cd / 进入根目录
cd /home 进入系统的home目录
cd home 进入当前目录下的home目录
◆目录重命名 mv SourceDirecName TargetDirecName
◆目录拷贝 cp SourceDirec TargetDirecName
cp -r 拷贝目录下的文件、子目录以及子目录下的文件
2.4 文件管理
◆新建文件 FileName 或 touch FileName 或 vi FileName
◆删除文件 rm [选项] FileName
选项: -i 系统提示是否真要删除该文件
-f 删除文件之前不提示任何确认信息
-r 递归删除目录下所有子目录的内容
◆文件链接 ln –s SourceFile TargetFile
创建文件链接,用ls –l 查看,会看到TargetFile –> SourceFile
◆显示文件内容
more FileName 一次一屏的显示文件的内容,空格或回车显示下一屏
cat FileName 一次全部显示文件的内容
cat file1 file2>file3 将file1、file2的内容写到file3,覆盖file3原内容
cat file1>>file2 将file1的内容追加到file2,file2原内容不变
head -n FileName 只显示文件的前n行
tail -n FileName 只显示文件的后n行
nl FileName 以编号的形式一次全部显示文件的内容,忽略空格
◆文件移动/重命名 mv SourceFile TargetFile 将一个或者多个文件移动到另一个目录下,或者将一个文件重命名为另一个文件
◆文件查找
find [路径] [选项] 如:find / -name name
◆文件内容查找
grep name FileName
◆文件类型
命令ls –l 以长列表显示文件类型
前缀 类型
- 普通文件
d 目录
l 链接文件
p 命名管道文件
s 本地套接口
b 块设备文件
◆文件访问权限
r :可读 w:可写 x:可执行
一个文件由1个类型和9个权限位来描述
-rwxrw-r-x 第一个位置表示文件的类型,第2、3、4位置表示文件属主的权限,第5、6、7位置表示文件属组的权限,第8、9、10位置表示其他用户的权限,a表示all以上三种人。
◆改变文件/目录的权限
chmod [u/g/o/a] [+/-/=] [权限] FileName/DirecName
其中:+ 增加制定的权限 - 去掉指定的权限 = 清除所选的权限并设置成指定的权限
chmod 允许使用八进制符号作为模式,改变权限,r的八进制表示为4,w八进制为2,x八进制为1,则-rwxrw-r-x可表示为 4+2+1=7(属主u的权限)4+2=6(属组的权限)4+1=5(其他用户的权限),授权可以表示为chmod 765 FileName/DirecName
改变文件属主 chown Owner FileName/DirecName
改变文件属组 chgrp Group FileName/DirecName
改变文件属主和属组 chown owner:group FileName/DirecName
3.变量
◆变量可以定制用户本身的工作环境,使用变量可以保存有用信息,是系统获知相关设置,也用于保存暂时信息。变量一般都用大写字母表示,使用echo命令可以显示单个变量的取值,要在变量名面前加$。
◆设置变量时,如果不想再改变其值,可以再变量名前加readonly。
使用set命令可以显示所有本地定义的shell变量。
使用unset 变量名 可以清除对变量的定义。
3.1 变量分类
◆本地变量:用户自定义变量。
◆环境变量:用于所有用户变量,用于用户进程前,必须用export命令导出。
◆位置参数变量:是一组特殊的内置变量,跟在脚本名后面的用空格隔开的每个字符串,$1表示第一个参数值,$2表示第二个参数值。它的用途是从shell命令/脚本的命令行接受参数,在调用shell函数时为其传递参数。
◆命令行参数相关
$* 将所有位置变量组成一个字符串(以空格隔开)
$@ 将每个位置变量看成单独的字符串,每个字符串用空格隔开
$0 命令行里脚本名
$# 命令行上参数的个数
◆进程状态相关
$? 上条命令执行后的返回值 0:成功 1-255:不成功
$$ 当前进程的进程号
$! 显示运行在后台的最后一个作业的PID
$_ 在此之前执行的命令或脚本的最后一个参数
◆exit 用于退出脚本或者当前shell
exit n n为0时表示成功退出,非零表示遇到某种失败,返回值被保存在状态变量$?中。
3.2 变量表达式
◆test表达式,条件测试可以根据某个特定条件是否满足,来选择执行相应的任务。任何一种测试中,都要有退出状态(返回值),退出状态为0表示命令成功或者表达式为真,非0则表示失败或表达式为假,态变量$?中保存命令退出状态的值。
通常用test命令来测试表达式的值,同时也可以用方括号来代替。
◆字符串测试
= 比较两个字符串是否相同,同则为“是”!= 比较两个字符串是否相同,不同则为“是”;
-n 比较字符串长度是否大于零,如果大于零则为“是” ;
-z 比较字符串的穿度是否等于零,如果等于则为“是”。
如 [ -z str ] 如果字符串str长度为0,返回真 记住方括号操作符两边都要留空格。
◆整数测试
-eq 相等 -ge 大于等于 -le 小于等于
-ne 不等于 -gt 大于 -lt 小于
如 [ int1 –eq int2 ] nt1等于int2 记住方括号操作符两边都要留空格。
整数测试也可以使用let命令或者双圆括,相应操作符为:==、!=、>、>=、<、<=。
如x=1;let “$x == 1”; echo $?
x=1;(($x+1>+2)); echo $?
let命令或者双圆括号可以使用算术表达式,而方括号不能。
◆逻辑测试
! 反:与一个逻辑值相反的逻辑值
-a 与(and):两个逻辑值为“是”返回值才为“是”,反之为“否”
-o 或(or):两个逻辑值有一个为“是”,返回值就为“是”
如 [ expr1 –a expr2 ] 都为真时,结果为真 记住方括号操作符两边都要留空格。
◆文件测试
文件测试表达式通常是为了测试文件的信息,一般由脚本来决定文件是否应该备份、复制或删除。man test 可以查看更多文件测试符。
-d 对象存在且为目录返回值为“是”
-f 对象存在且为文件返回值为“是”
-L 对象存在且为符号连接返回值为“是”
-r 对象存在且可读则返回值为“是”
-s 对象存在且长度非零则返回值为“是”
-w 对象存在且可写则返回值为“是”
-x 对象存在且可执行则返回值为“是”
如 [ -s filename.sh ] 文件长度非零时为真,返回0。
◆检查空值
[ “$name” = “” ]
[ ! “$name” ]
[ “X${name}” != “X” ]
- 点赞
- 收藏
- 关注作者
评论(0)