马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
如果您觉得本篇CentOSLinux教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的好朋友们!shellscript是使用shell的功效所写的一个步伐,这个步伐利用纯文本文件,将一些shell的语法和下令写在内里,搭配正则表达式,管道下令与数据流重定向等功效,到达我们想要的目标
shellscript实行
间接下令实行
shellscript文件必需具有rx的权限,假定my.sh在/root下
相对路径
[root@bogon~]#/root/my.sh
绝对路径
[root@bogon~]#./my.sh
bash(sh)下令实行
shellscript文件必需具有r的权限
root@bogon~]#shmy.sh
source或.下令实行
source或.下令实行与下面实行分歧,下面实行shell城市分派一个子历程来举行,source或.下令就在本历程实行,也就是说一些非情况变量也能读取到
root@bogon~]#sourcemy.sh
shellscript编写
后面提到shellscript中可使用shell下令,那末shellscript格局是如何的?
shellscript文件my.sh
#!/bin/bash
#Thisismyfirstshellscript
echo"helloworld"
第1行:必需要以#!/bin/bash开首代表这个文件内的语法利用bash的语法
第2行:正文以#开首
第3行:shell下令
shellscript主要功效
test测试下令
用来检测体系下面某些文件大概相干的属性
测试的标记
代表意义
1.关于某个文件名的[文件范例]判别,如test-efilename暗示存在否
-e
该[文件名]是不是存在?(经常使用)
-f
该[文件名]是不是存在且为文件(file)?(经常使用)
-d
该[文件名]是不是存在且为目次(directory)?(经常使用)
-b
该[文件名]是不是存在且为一个blockdevice安装?
-c
该[文件名]是不是存在且为一个characterdevice安装?
-S
该[文件名]是不是存在且为一个Socket文件?
-p
该[文件名]是不是存在且为一个FIFO(pipe)文件?
-L
该[文件名]是不是存在且为一个保持档?
2.关于文件的权限侦测,如test-rfilename暗示可读否(但root权限常有破例)
-r
侦测该文件名是不是存在且具有[可读]的权限?
-w
侦测该文件名是不是存在且具有[可写]的权限?
-x
侦测该文件名是不是存在且具有[可运转]的权限?
-u
侦测该文件名是不是存在且具有[SUID]的属性?
-g
侦测该文件名是不是存在且具有[SGID]的属性?
-k
侦测该文件名是不是存在且具有[Stickybit]的属性?
-s
侦测该文件名是不是存在且为[非空缺文件]?
3.两个文件之间的对照,如:testfile1-ntfile2
-nt
(newerthan)判别file1是不是比file2新
-ot
(olderthan)判别file1是不是比file2旧
-ef
判别file1与file2是不是为统一文件,可用在判别hardlink的判断上。次要意义在判断,两个文件是不是均指向统一个inode哩!
4.关于两个整数之间的判断,比方testn1-eqn2
-eq
两数值相称(equal)
-ne
两数值不等(notequal)
-gt
n1年夜于n2(greaterthan)
-lt
n1小于n2(lessthan)
-ge
n1年夜于即是n2(greaterthanorequal)
-le
n1小于即是n2(lessthanorequal)
5.判断字串的数据
test-zstring
判断字串是不是为0?若string为空字串,则为true
test-nstring
判断字串是不是非为0?若string为空字串,则为false。
注:-n亦可省略
teststr1=str2
判断str1是不是即是str2,若相称,则回传true
teststr1!=str2
判断str1是不是不即是str2,若相称,则回传false
6.多重前提判断,比方:test-rfilename-a-xfilename
-a
(and)两种情形同时建立!比方test-rfile-a-xfile,则file同时具有r与x权限时,才回传true。
-o
(or)两种情形任何一个建立!比方test-rfile-o-xfile,则file具有r或x权限时,便可回传true。
!
反相形态,如test!-xfile,当file不具有x时,回传true
举例
shellscript文件内容:
1
2
3
4
5
6
7
8
9
10
#!bin/bash
read-p"pleaseinputfile/dirname:"name
echo"yourinputis$name"
test!-e$name&&echo"fileisnotexist!"&&exit1
test-d$name&&echo"fileisdirectory"
test-f$name&&echo"fileisregulatefile"
test-r$name&&echo"youcanreadthisfile"
test-w$name&&echo"youcanwritethisfile"
test-x$name&&echo"youcanexecthisfile"
exit0
实行了局
1
2
3
4
5
6
7
8
9
10
11
12
13
[root@localhostscripts]#shtest.sh
pleaseinputfile/dirname:n
yourinputisn
fileisnotexist!
[root@localhostscripts]#shtest.sh
pleaseinputfile/dirname:sh01.sh
yourinputissh01.sh
fileisregulatefile
youcanreadthisfile
youcanwritethisfile
youcanexecthisfile
[root@localhostscripts]#llsh01.sh
-rwxr--r--1rootroot4803-0710:15sh01.sh
测试下令
[]测试下令和test用法一向,只是利用时要注重空格符利用
在中括号内的每一个组件又要有空格符支解
在中括号内的变量常量都要利用“”括起来
举例
shellscript文件内容:
1
2
3
4
5
6
7
#!/bin/bash
read-p"pleaseinputy/n:"yn
[-z"$yn"]&&echo"yourinputisempty"&&exit1
["$yn"=="y"-o"$yn"=="Y"]&&echo"itisok"&&exit0
["$yn"=="n"-o"$yn"=="N"]&&echo"itisnotok"&&exit0
echo"youinputis$yn.pleaseuseinput(y/n)"
exit2
实行了局
1
2
3
4
5
6
7
8
9
[root@localhostscripts]#sh[].sh
pleaseinputy/n:
yourinputisempty
[root@localhostscripts]#sh[].sh
pleaseinputy/n:Y
itisok
[root@localhostscripts]#sh[].sh
pleaseinputy/n:A
youinputisA.pleaseuseinput(y/n)
实行参数
能够在实行shellscript时增加参数
shvar.shfirstsecondthird
$1$2$3
个中first作为第一个参数存储在$1中,顺次类推。
几个主要的参数:
$#:猎取参数的数目
$@:猎取参数的全体内容
举例
shellscript文件内容:
1
2
3
4
5
#!/bin/bash
echo"totalparameternumberis:$#"
echo"wholeparameteris:$@"
echo"1stparameteris:$1"
echo"2stparameteris:$2"
实行了局
1
2
3
4
5
[root@localhostscripts]#shvar.shfirstsecondthird
totalparameternumberis:3
wholeparameteris:firstsecondthird
1stparameteris:first
2stparameteris:second
if…..then
语法:
If[前提判别式];then
待实行的shell下令
fi
举例
shellscript文件内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/bash
read-p"pleaseinputy/n:"yn
if[-z"$yn"];then
echo"yourinputisempty"
exit1
fi
if["$yn"=="y"-o"$yn"=="Y"];then
echo"itisok"
exit0
fi
if["$yn"=="n"-o"$yn"=="N"];then
echo"itisnotok"
exit0
fi
exit2
实行了局
1
2
3
4
5
6
7
8
9
[root@localhostscripts]#shifthen.sh
pleaseinputy/n:
yourinputisempty
[root@localhostscripts]#shifthen.sh
pleaseinputy/n:Y
itisok
[root@localhostscripts]#shifthen.sh
pleaseinputy/n:N
itisnotok
if…else
语法:
If[前提判别式];then
待实行的shell下令
else
待实行的shell下令
fi
if…elif..else
语法:
If[前提判别式];then
待实行的shell下令
elif[前提判别式];then
待实行的shell下令
else
待实行的shell下令
fi
case…esac
语法:
case$变量in
“第一个变量内容”)
待实行的shell下令
;;
“第n个变量内容”)
待实行的shell下令
;;
*) |