仓酷云

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

[shell编程] 带来一篇几个shell步伐计划小常识

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

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

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

x
如果您觉得本篇CentOSLinux教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的好朋友们!1、用户上岸进进体系后的体系情况变量:
$HOME利用者本人的目次
$PATH实行下令时所征采的目次
$TZ时区
$MAILCHECK每隔几秒反省是不是有新的函件
$PS1在下令列时的提醒号
$PS2当下令还没有打完时,Shell请求再输出时的提醒号
$MANPATHman指令的征采路径

2、特别变量:

$0这个步伐的实行名字
$n这个步伐的第n个参数值,n=1..9
$*这个步伐的一切参数
$#这个步伐的参数个数
$$这个步伐的PID
$!实行上一个指令的PID
$?实行上一个指令的前往值

3、shell中的变元:
*恣意字符串
?一个恣意字符
[abc]a,b,c三者中之一
[a-n]从a到n的任一字符

4、几个特别字符暗示

退回
c打印一行时没有换行符这个我们常常会用到
f换页
回车
        制表
v垂直制表
反斜线自己

5、判别文件的属性

格局:-操纵符filename
-e文件存在前往1,不然前往0
-r文件可读前往1,不然前往0
-w文件可写前往1,不然前往0
-x文件可实行前往1,不然前往0
-o文件属于用户自己前往1,不然前往0
-z文件长度为0前往1,不然前往0.
-f文件为一般文件前往1,不然前往0
-d文件为目次文件时前往1,不然前往0

6、测试字符串
字符串1=字符串2 当两个字串相称时为真
字符串1!=字符串2当两个字串不等时为真
-n字符串    当字符串的长度年夜于0时为真
-z字符串     当字符串的长度为0时为真
字符串      当串字符串为非空时为真

7、测试两个整数干系
数字1-eq数字2    两数相称为真
数字1-ne数字2    两数不等为真
数字1-gt数字2    数字1年夜于数字2为真
数字1-ge数字2   数字1年夜于即是数字2为真
数字1-lt数字2    数字1小于数字2为真
数字1-le数字2    数字1小于即是数字2为真

8、逻辑测试
-a      与
-o       或
!        非

明天先容shell特别字符的援用
===============================
shell中的特别字符有

1、$美圆符
2、反斜杠
3、`反引号
4、" 双引号
5、<,>,*,?,[,]

上面我逐一举列申明
1、$标记
1、echo$?显现的是上一条指令加入形态
2、echo"$?"效果同上
3、echo$?显现的是$?
4、echo$?显现的是$?
5、echo"$?"显现的是$?

  人人大概已看出 $标记在双引号中具有特别意义 双引号对$标记不起感化
而单引号能够将特别字符的的特别意义屏障失落,使其能显现为字符自己,反斜
杠也能够将特别字符的特别寄义屏障失落,使特别字符得到特别寄义。

2、 反斜杠
  反斜杠的感化是将特别标记字符的特别寄义屏障失落,使其仍是原字符
A=1234
echo$A显现为$A假如不加将显现为1234
echo`显现为`
echo"显现为双引号
echo显现为

3、`反引号
  反引号的功效是下令交换,将反引号中的字符串做为下令来实行,我们在用shell编程时常常用的到 将体系下令的实行了局赋给一个变量

A=`date`
echo$A显现的不是date而是事先的工夫串
好比有一文件A的内容以下 
ABCDEFG
1234456
abcdefg

B=`catA|grep234`?#检索文件A中含有字符串234的行
echo$B将显现为1234456
echo"$B"将显现为何?
echo"$B"将显现为何?读者本人尝尝

4、"双引号
  在体系中有些特别字符,为制止援用这些特别字符 常常用双引号或单引号将这些特别字符引发来,使其不具有特别寄义。
  但有一局部特别字符在引号中仍是具有特别寄义,用双引号引发来是不起感化的。本文中所列的前四个特别字符在双引号中仍是特别字符。为了使其不具有特别寄义一是用单引号引出去二是用反斜线使其得到感化。

  好比我们想原样输入这些特别字符

echo"""
echo"$"
echo""
echo"`"
   以上不是你所希冀的了局,由于双引号对它们不起感化,你只能如许才干输入这些特别字符的本相
echo"
echo$
echo
echo`

echo"""
echo"$"
echo""
echo"`"
将分离显现为 "$`
5、别的特别字符
  人人注重到 除前四个特别字符外 我将别的的特别字符都放在一块,这是由于前四个特别字符在双引号中仍是具有特别寄义,以是独自拿出来说,除此之外的特别字符假如你要输入这些特别字符的本相,你就能够用双引号或单引号引发来使其得到特别寄义。
<,>,*,?,[,]对shell有特别寄义 但你能够用双引号引发来输出这些本相

  讲了这么多人人是否是已注重到一切的特别字符在单引号中得到特别寄义,假如你要输入特别字符本相但又记不清那些特别字符在双引号中不克不及输入本相,倡议你爽性用单引号引发来。

明天先容前提测试语句

1、if前提语句 
格局:
if前提表达式
then#当前提为真时实行以下语句
下令列表
else#为假时实行以下语句
下令列表
fi

if 语句也能够嵌套利用

if前提表达式1
then
if前提表达式2
then
下令列表
else
if前提表达式3
then
下令列表
else
下令列表
fi
fi
else
下令列表
fi

你能够举行多层嵌套 一个if语句必定要跟一个fi 暗示该层前提停止  不然会形成语法毛病
分离后面讲的 举比方下:
这里先讲一个前提语句顶用到的下令test 暗示测试test前面的前提是不是为真

iftest-f"$1"
then
lpr$1
else
iftest-d"$1"
then
cd$1
lpr$1
else
echo"$1不是文件或目次"
fi
fi

以上的例子还能够改成以下所示

iftest-f"$1"
then
lpr$1
eliftest-d"$1"#elif 同elseif
then
(cd$1;lpr$1)
else
echo"$1不是文件或目次"
fi??????

以上的例子不知您是不是看懂是甚么意义吗?
假设我们如今将这个例子保留为prfile
chmod+xprfile
实行方才的步伐
./prfileaaa

这个例子是反省你的输出的参数是不是是一个文件 假如是就打印 假如是一个目次 先转目次再打印 假如即不是文件也不是目次给出提醒

2、多重前提测试语句case
格局:
case字串 in
形式)下令列表;;
形式)下令列表;;
....
esac

多重前提语句是以case入手下手以esac停止 两头能够有多个前提列表 功效是测试字串和和内里的形式有无婚配的,有就实行内里的下令列表 形式也能够是*号 暗示恣意字串,每一个形式内里的最初要心;;双引号停止,不然会产生语法毛病。

现举比方下:

case$1in
*.c)
cc$1
;;
*.txt)
lpr$1
;;
*)
echo"未知的范例"
esac

假设将以上内容保留在文件abc中

chmod+xabc
实行 ./abca.c 将会对文件a.c举行编译
实行./abcreadme.txt 将会把文件经由过程打印机
假设我将以上内容改一下,你是不是会晓得它的实行了局?

case$1in
*)
cc$1
;;
*.txt)
lpr$1
;;
*.c)
echo"未知的范例"
esac

明天先容轮回语句
一.while轮回
while下令格局

while前提表
do
下令表
done

实行历程

shell起首实行前提表,假如前提表的最初一条语句的加入形态为零,则实行盾环体内的下令
表,实行完后,再反省前提表,假如加入形态为零将持续实行,云云轮回来去直到前提表的
最初一条语句的加入形态非零.加入形态为零就是前提为真True.

举例申明假设shell文件的内容以下:

Sum=0
i=0
whiletrue#true是体系的关头词暗示真
do
i=`expr$i+1`
Sum=`expr$Sum+$i`
if[$i="100"]
then
break;
fi
done
echo$i$Sum
最初这个步伐显现的是1005050
这个步伐的运算就是将1到100加起来

上面将这个步伐再修改一下



Sum=0
i=0
while[$i!="100"]
do
i=`expr$i+1`
Sum=`expr$Sum+$i`
done
echo$i$Sum

修改后的步伐运算了局和下面是一样但步伐比下面的要简洁

在这个轮回中还能够以until做为测试前提它恰好与while测试的前提相反,也就是当前提为假时将持续实行轮回体内的语句,不然就加入轮回体,上面还用这个例子.


Sum=0
i=0
until[$i="100"]
do
i=`expr$i+1`
Sum=`expr$Sum+$i`
done
echo$i$Sum
当i不即是100时轮回就是当前提为假时轮回,不然就加入,而第一个例子是当i不即是100
时轮回,也就是测试前提为真时轮回.

二.for轮回

下令格局:
for变量in名字列表
do
下令列表
done

这里的名字列表是一个由空格分开的字符串列表,shell在实行for轮回时每次顺次从名字表
中掏出一个字符串赋给轮回变量作为变量的值.
在写for语句时,也能够省略in名字列表局部,这暗示用以后的地位参数来取代这时候的名
字列表.
上面举个例子
好比在你的电脑中有两个目次,一个是aa,一个是bb在这两个目次中有5个不异的文件,但其
中一个目次中的一个或多个文件方才修正过,如今我健忘方才改的是那几个文件了,那末我*梢员冉弦幌抡饬礁瞿柯嫉奈募?椭?懒?步伐以下:

forFileina1a2a3a4a5
do
diffaa/$Filebb/$File
done

上面再举一个不带名字列表的例子

forFile
do
echo$Filw
done

文件内容保留在a.sh中并可实行
我们在实行这个shell步伐时下令行以下:
a.sha1a2a3a4a5
实行了局以下:
a1
a2
a3
a4
a5
人人从这个例子中能够看到下令行的参数被一一读进一次
三.轮回把持语句
break下令不实行以后轮回体内break上面的语句从以后轮回加入.
continue下令是步伐在本循体内疏忽上面的语句,从轮回头入手下手实行.

一,下令组合:圆括号和花括号
shell中有两种***将下令组合在一同:圆括号和花括号.圆括号使shell创立一个子shell
来读取并实行括起来的名下令.左括号和右括号不管呈现在下令行中的甚么地位,shell城市
以为它们具有特别的组合意义的.只要用双引号将它们括起来援用,才暗示圆括号或花括号
的原义.比方:

echoa(b)
将呈现语法上的毛病,要想输入a(b)字符串只能括起来
echo"a(b)"
或echoa"("b")"
如许才干被shell准确注释.
使用组合下令有甚么感化呢?
一,用圆括号组合下令
圆括号的组合下令能够创立子历程运转组合步伐,创建子历程的功效是很有效的,由于
子shell在组合下令中的各种操纵都不会影响到以后shell的各变量的值.
比方:
子历程在实行组合下令时改动了事情目次,并在新的事情目次下实行一系例下令,实行
完后它能够不用前往原事情目次,由于子历程事情目次的改动不会影响到以后事情目次.

创立子历程后将以后的情况也一样传给子shell,以后shell顶用export输入到情况中的
各变量在子shell中一样无效.


花括号也能够将下令组合在一同.左右花括号只要作为一条下令的第一个字呈现时,
shell才它们含有特别寄义.
与圆括号分歧的是花括号其实不创立子shell,只是由以后的shell来读取并实行括起来的
下令.偶然用户但愿利用一组下令的按次输入作为另外一组下令的输出,此时用花括号是很方
便的.
不管是用圆括号不是花括号,加入形态都是即是最初一条括起来的下令的加入形态.


二,能够在以后shell中实行的下令

用户在利用shell时必定要懂得那些是能够在以后shell中实行的下令那些不成以
能够在以后shell中实行的下令有:

breakcasecdcontinue
echoevalexecexit
exportforifread
readonlyreturnsetshift
testtimestrapumask
untilwaitwhile
:{}如果您觉得本篇CentOSLinux教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的小伙伴们!
蒙在股里 该用户已被删除
沙发
发表于 2015-1-16 14:53:18 | 只看该作者

带来一篇几个shell步伐计划小常识

熟悉操作是日常学习Linux中的三大法宝。以下是作者学习Linux的一些个人经验,供参考:
金色的骷髅 该用户已被删除
板凳
发表于 2015-1-25 21:50:21 | 只看该作者
这种补充有助于他人在邮件列表/新闻组/论坛中搜索对你有过帮助的完整解决方案,这可能对他们也很有用。
若相依 该用户已被删除
地板
 楼主| 发表于 2015-2-4 13:57:06 | 只看该作者
感谢老师和同学们在学习上对我的帮助。
小魔女 该用户已被删除
5#
发表于 2015-2-10 02:23:59 | 只看该作者
尽我能力帮助他人,在帮助他人的同时你会深刻巩固知识。
只想知道 该用户已被删除
6#
发表于 2015-2-28 18:50:37 | 只看该作者
随着实验课程的结束,理论课也该结束了,说实话教OS的这两位老师是我们遇到过的不错的老师(这话放这可能不太恰当).
活着的死人 该用户已被删除
7#
发表于 2015-3-10 09:42:14 | 只看该作者
直到学习Linux这门课以后,我才知道,原来我错了。?
透明 该用户已被删除
8#
发表于 2015-3-17 11:08:21 | 只看该作者
如果你有庞大而复杂的测试条件,尽量把它剪裁得越小越好。可能你会遇到这种情况,对于一个问题会出现不同内容回答,这时你需要通过实践来验证。
再见西城 该用户已被删除
9#
发表于 2015-3-24 10:18:26 | 只看该作者
对我们学习操作系统有很大的帮助,加深我们对OS的理解。?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-23 20:41

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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