仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1151|回复: 9
打印 上一主题 下一主题

[shell编程] 来一发shell script

[复制链接]
爱飞 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-14 20:14:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

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下令
;;
*)
灵魂腐蚀 该用户已被删除
沙发
发表于 2015-1-15 08:01:42 | 只看该作者

来一发shell script

现在我隆重的宣布本界的诺贝尔文学奖颁发给来自中国的WWW221先生,下面让我们以最诚挚的掌声欢迎楼主发表获奖感言.....
兰色精灵 该用户已被删除
板凳
发表于 2015-1-17 15:36:37 | 只看该作者
把这个问题放在其他Linux社区请求帮助也是一种选择。如果Linux得不到答案,请不要以为我们觉得无法帮助你。有时只是看到你问题的人不知道答案罢了。这时换一个社区是不错的选择。
金色的骷髅 该用户已被删除
地板
发表于 2015-1-26 19:27:11 | 只看该作者
Linux是参照Unix思想设计的,理解掌握Linux必须按照Unix思维来进行。思想性的转变比暂时性的技术提高更有用,因为他能帮助你加快学习速度。
简单生活 该用户已被删除
5#
发表于 2015-2-5 00:02:31 | 只看该作者
得到到草率的回答或者根本得不到任何Linux答案。越表现出在寻求帮助前为解决问题付出的努力,你越能得到实质性的帮助。
活着的死人 该用户已被删除
6#
发表于 2015-2-11 00:36:22 | 只看该作者
linux鸟哥的私房菜,第三版,基础篇,网上有pdf下的,看它的目录和每章的介绍就行了,这个绝对原创!
冷月葬花魂 该用户已被删除
7#
发表于 2015-3-1 19:26:28 | 只看该作者
在学习的过程中,我们用的是VM虚拟机,开始时真的不真的该怎么去做,特别是我的是命令窗口界面,别人的是图形界面,我都不知道怎么调过来。
山那边是海 该用户已被删除
8#
发表于 2015-3-11 01:02:09 | 只看该作者
随着IT从业人员越来越多,理论上会有更多的人使用Linux,可以肯定,Linux在以后这多时间不会消失。
9#
发表于 2015-3-17 19:32:49 | 只看该作者
熟悉并掌握安装Linux,安装是学习的前提。目前较常见的安装方法有二种:
小魔女 该用户已被删除
10#
发表于 2015-3-25 02:38:01 | 只看该作者
选择交流平台,如QQ群,网站论坛等。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-4-28 21:46

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表