1.焦点命令

touch 创造空文件(当然,你也足以选用echo >filename)

ln 创立链接符号(火速方式|引用):

  1. 标志链接:ln –s
  2. 硬链接:ln

 

区别:

  1. 标记链接暴发了一个连忙情势,是对源文件的一个链接。
  2. 硬链接是底层字节的链接,简而言之,相当于是一个文书,八个文本名,占用同样块扇区,好处是省空间,就算删除一个,只要还有硬连接,这一个文件就如故存在。

ls –i
查看文件inode编号(唯一的,可以确认文件是不是为同一个,类似于hash值)

mv 移动|重命名

file 查看文件(文件夹)类型等新闻

cat 彰显内容 -n:所有行号 ;-b:有字加行号;-T:不突显制表符;

more 按页显示;例如:cat xxx |more

tail 查看文件结尾;-n
number(或-number):指定最终几行;-f:追踪,可以动态追踪日志文件。

head 与tail类似,但是没有-f参数

ps 进程

top 显示linux进度(Linux版职分管理器)

kill 干掉进度

df 查看硬盘空间

sort 文件内容排序

grep 搜索文本

$BASH_SUBSHELL 子shell检测变量

sleep timeCount(s)

句子结尾加&:后台格局运行

jobs 工作

(command 1;command 2…) 义务列表,可以同时推行

coproc 协程(后台有个子shell,执行你的授命,同时生成一个job)

which 查看命令程序所在地方

history 命令历史记录

  !! 上一个历史命令(省着按升高箭头了)

  !number 第n条历史命令被执行

  1. 创制Shell脚本文件

  2. 体现音讯

  3. 应用变量

  4. 反引号

  5. 重定向输入输出

  6. 管道

  7. 施行数学运算

  8. 退出脚本

shell脚本关键在于输入两个指令并且处理每个命令的结果,将一个限令结果传给别的一个下令。

2011-07-26 11:22 1071人阅读 评论(0)
收藏;) 举报

环境

printenv 查看环境变量(env只好查看所有的全局变量);
本命令扶助查看某条变量(不需求加韩元符号,echo须要)

set 查看|设置环境变量

export
遍地变量为全局变量,就可以在各个shell中利用了(并不可以使shell的父shell环境变量暴发变化)

unset 删除环境变量

passwd (chpasswd) 密码查看|修改

umask 为文件分配默许权限

chmod 更改权限

chown 改变归属权


多个指令在一齐运行,用分号隔开

Shell脚本是Linux开发工作中常用的工具,但是本人直接未曾找到一个顺应自己的简练的HandBook。在工作经过中整理了眨眼间间,贴在那边已备查看。

分区

fdisk 分区;p:突显基本配备音信;n:new个分区;w:write进设备

mkefs 格式化ext分区;

mke2fs 格式化ext2分区;

mkfs.ext3 格式化ext3分区;

mkfs.ext4 格式化ext4分区;

mkreiserfs 格式化reiserfs分区

jfs_mkfs 格式化jfs分区

mkfs.xfs 格式化xfs分区

mkfs.zfs 格式化zfs分区

mkfs.btrfs 格式化btrfs分区

fsck 检查修复分区
-a:自动检测修复;-A:列出fstab中有着分区,并检测;-C:显示辅助的文件系统检测时的快慢条(ext2、3);-s:多个文件系统依次检查;

LVM
可以添加几个硬盘到一个卷组(整合为一个大分区也尚未难题),可以创制快照,镜像。

怎么样创制LVM物理卷?使用fdisk
t来改变分区类型(为8e);或利用pvcreate成立,pvdisplay查看创造进程;

vgcreate 创制卷组(为物理卷);例如:vgcreate Vol1
/dev/sda1;vgdisplay查看进程

lvcreate 创立逻辑卷;例如:lvcreate –l 100%FREE –n lvtest
Vol1;lvdisplay查看进程

冷艳这样还不够!!!还要有文件系统,如ext4的LVM:mkfs.ext4
/dev/Vol1/lvtest。上述创立了一个ext4类其余逻辑卷lvtest。还要手动挂载:mount
/dev/Vol1/lvtest /mnt/my_partation

LVM的一堆管理命令:

vgchange 激活和剥夺卷组
vgremove 删除卷组
vgextend 将物理卷加到卷组中
vgreduce 从卷组中删除物理卷
lvextend 扩充逻辑卷的轻重
lvreduce 减小逻辑卷的大小

  1. 创办脚本文件的时候,必须将文件的率先行指定要动用的shell。其格式为:

echo 可以来得简单的文本字符串

 

2.shell编程

变量是宽大的定义,任何由字母、数字或下划线组成的文本字符串,长度不当先20个。用户变量区分轻重缓急写,所以变量
Var1 和变量 var1 是见仁见智的。

shell编程最强劲的地点在于可以从console的出口中取回那个输出,并随便拔取,一旦那样做,则足以拔取shell做此外业务了,只要你能在console中输出它。

如何从shell中获得输出的始末?二种方式:

  1. 反引号符号;
  2. $();

 例如,使用date命令能够出口当前时光,即使写shell脚本的话,可以通过如下二种写法获取console的date:

1 date=$(date);
2 date=`date`;

字符串如果统一的话,直接种种引号,而不须要+或者其它的操作,如:

str1="string1";
str2="string2";
str3=$str1$str2;

出口或引用一个变量,则足以:

echo $str3;

输出重定向:>

在已部分文件中增添内容:>>

输入重定向:<

内联输入重定向:<<

管道:|

其实,windows console中也支撑管道.

比如说,以前用more对console的始末展开分页:ls -al |more

既是是管道,必然帮忙广大管道,固然可能只会用到多个

shell中计算:expr

比如说总括1+2:

expr 1 + 2
#注意上式的空格,运算符间都是有的
表11-1 expr 命令操作符
arg1 |arg2  如果arg1既不是null也不是0,返回arg1;否则arg2
ARG1 & ARG2 如果没有参数是null或零值,返回 ARG1 ;否则返回 0
< 如果 ARG1 小于 ARG2 ,返回 1 ;否则返回 0
<= 如果 ARG1 小于或等于 ARG2 ,返回 1 ;否则返回 0
= 如果 ARG1 等于 ARG2 ,返回 1 ;否则返回 0
!= 如果 ARG1 不等于 ARG2 ,返回 1 ;否则返回 0
>= 如果 ARG1 大于或等于 ARG2 ,返回 1 ;否则返回 0
> 如果 ARG1 大于 ARG2 ,返回 1 ;否则返回 0
+  
 
*  
/  
%  
STRING : REGEXP 如果 REGEXP 匹配到了 STRING 中的某个模式,返回该模式匹配
match STRING REGEXP 如果 REGEXP 匹配到了 STRING 中的某个模式,返回该模式匹配
substr STRING POS LENGTH 返回起始位置为 POS (从 1 开始计数)、长度为 LENGTH 个字符的子字符串
index STRING CHARS 返回在 STRING 中找到 CHARS 字符串的位置;否则,返回
index STRING CHARS 返回字符串 STRING 的数值长度
+ TOKEN 将 TOKEN 解释成字符串,即使是个关键字
(EXPRESSION) 返回 EXPRESSION 的值

亟需小心,尽可能的把运算符号此前增进转义字符,否则很可能会造成expr收到错误!

例如 expr 1 * 2

据此,bash shell为了有限扶助跟Bourne shell的匹配而带有了 expr
命令,但它一样也提供了一种更简约方法来实施数学表明式。在bash中,在将一个数学运算结果赋给某个变量时,可以用法郎符和方括号(
$[尝试自己编排一个简易脚本,脚本常用命令。 operation ] )将数学表明式围起来。

如此,就非凡便宜了,仍旧1+2,则足以写成:

$[1+2]

而素有不需求考虑空格的题材~~~

那边需求小心的是,bash
shell本身不协助浮点数运算,所以能够拔取此外的方法:

bash计算器:bc;

利用bash须要小心,精度(scale)默许为0,所以须求设置:scale=0

bc本身帮助定义变量

 在剧本中动用bc:

echo “scale=4;1/2” |bc
# 或
echo “scale=4;print 1/2” |bc

 更好的不二法门是应用内联输入重定向(<<):

#!/bin/bash
var1=10.46
var2=43.67
var3=33.2
var4=71
var5=$(bc << EOF
scale = 4
a1 = ( $var1 * $var2)
b1 = ($var3 * $var4)
a1 + b1
EOF
)
echo The final answer for this mess is $var5

## EOF既是输入的开始,又是输入的结束,所以计算没有问题的

本子退出命令:

exit exitCode

查阅退出代码:

echo $?

剥离代码意图:

0 命令成功结束
1 一般性未知错误
2 不适合的shell命令
126 命令不可执行
127 没找到命令
128 无效的退出参数
128+x 与Linux信号x相关的严重错误
130 通过Ctrl+C终止的命令
255 正常范围之外的退出状态码

#!/bin/bash

echo this is a test 可以不加双引号
可是假若字符串中有双引号的话,就要用别的引号将字符串圈起来

1           Shell中的特殊符号

 条件结构:if,then,elif,fi

if command
#注意是command不是condition!
then
  commands
elif command
then
      commands
...
else
  commands
  ...
  if command
  then
    commands
  fi
fi
#或
if command;then
  commands
fi

运转脚本文件时要制订文件地方,还要予以文件运行的权杖:

echo “this is a test to see if you’re paying attention”

1.1           $ 
比索符号。用来表示变量的值。如变量NAME的值为迈克,则使用$NAME就足以收获“迈克”那些值。

test

如何是condition呢?答案是:

test,即if行由command 后边改为:

test condition

chmod u+x file

在同一行彰显一个文本字符串作为命令输出

1.2          # 
井号。除了做为超级用户的唤醒符之外,仍可以在剧本中做为注释的上马字母,每一行语句中,从#号起初的有些就不履行了。

数值相比较

例如:

ret=1
if test ret -eq 1
then
    echo ret is 1
fi

关于里面的-eq,则是判定标准的一种方式:等于。

test 命令的数值正如效益

说明

等效

n1 -eq n2

==

=

-ge

>=

>=

-gt

>

<

-le

<=

<=

-lt

<

<

-ne

!=

!=

test的另一种写法是:

[ condition ]
#注意方括号都和condition有空格的!!!

例如,将test子例改写一下,即:

ret=1
if [ ret -eq 1 ]
then
    echo ret is 1
fi

test可以做:

 数值比较
 字符串相比较
 文件比较

运行:./file

echo -n “the time and date are:”
后来输出的内容就会在一行

1.3           “” 
双引号。shell不会将一对双引号之间的文件中的半数以上特殊字符进行解释,如#不再是注释的开端,它只象征一个井号“#”。但$如故维持新鲜意义。(在双引号中的$加变量名,即:$PARAM_NAME,仍然会转换成变量的值。)

字符串比较

test字符串比较测试
str1=str2 ==
!=  
< len
> len
-n len>0
-z len=0

特意须要注意不难犯错误的地方在于符号会与bash本身的有些标志争论而致使执行出错!!!包蕴:

<,>.

所以要拓展转义,即:

\>,\<.

  1. 来得消息:echo命令,比如:

选拔变量,$PATH

1.3.1     双引号对于一些特殊符号是不起成效的, 例如:”,$,\,`(反引号)

文件相比较

文件比较功能参数
-d file 存在目录
-e file exist
-f file 存在文件
-r file read
-s file 文件空
-w file write
-x file execute
-O file own
-G file group
file1 -nt file2 new than
file1 -ot file2 old than

何以简单的取得条件判断时规格的结果吗?

test 1 \= 1;echo $?

上句测试,为真,展现0

小心:test的三个参数,不应有在其中计算,而应该在事先的步骤已毕,否则恐怕会获取错误的结果!!!(亲测)

比如说:一定存在$HOME,所以test -e $HOME 必然为真(0)。

只是,假使$HOME中不设有123索引或文件夹,则test -e $HOME/123依然会回去0.

而听从我写的小心,写为x1=$HOME/123;test -e $1;echo
$?则会回去1,即真实结果.

所以肯定要小心那种场地!

#!/bin/bash

唯独要利用美金符号,就要加反斜杠
echo “the cost of the item is $15”

1.3.2     双引号和单引号无法嵌套。即:echo ‘””’  输出””,  echo “’’”
输出’’

越来越多的条件:

&&,||

echo “========请输入用户名=========”

${variable}引用的变量,用来扶助识别韩元符号后的变量

1.4           ‘’ 
单引号。shell不会将一对单引号之间的其它字符做特殊表明。(在双引号中的$加变量名,即:$PARAM_NAME,不会转换成变量的值。)

更尖端的数值标准:(())

(())操作符
val++  
val–  
++val  
–val  
!
~ 按位非
**
<<  
>>  
& 按位与
| 按位或
&& 逻辑与
|| 逻辑或

测试进程中,发现,还帮衬广大操作:==,!=,<,>,<=,>=,+,-,*,/.

此外,(())不需求转义以及空格!!!

  1. 运用变量:

shell脚本会自动决定变量值的数据类型

1.4.1     echo “$HOME”    (结果:/home/xiongguoan)

更尖端的字符串条件:[[]](20章)

高级作用:regex,

Linux中变量分为环境变量和用户变量二种。环境变量就是系统环境中自带的变量,比如set命令可以查阅所有的环境变量。用户变量就是用户自己定义的变量,只设有于当下的shell中。

引用一个变量值的时候须要选用新币符,但是引用变量来进行复制的时候不要求法郎符。
尚无英镑符,shell会将其解释为文本字符串

1.5          “ 
倒引号。命令替换。在倒引号内部的shell命令首先被实施,其结果输出代替用倒引号括起来的文本,可是特殊字符会被shell解释。

更尖端的条件结构:case

case variable in
pattern1 | pattern2 ) commands1 ;;
pattern3 ) commands2 ;;
*) default commands ;;
esac

在本子文件中援引变量的时候要用英镑符:$,。比如:

反引号允许将shell命令输出赋给变量

1.5.1     echo ‘$HOME’    (结果:$HOME)

 更多的结构化:for

for var in list
do
commands
done

地点所说的list,其实可以是字符串(每个项以空格分开,如若想防止项中有空格,则足以为每个项加一对引号,假诺同时存在引号,最好转义,用另一种引号次之)。

由此看来,那个for用着或者尚未编程语言的便民,假若想举办100次某些命令,那么需求生成一个独具100项的列表。

for star in $(ls)
 do 
    echo "111 $star"
done

 

#!/bin/bash

testing=`date`
date +%y%m%d
110131

就算是这样
testing=date

$testing就会直接运行date命令```

###输出重定向

1.6          \ 
斜杠。用来去掉在shell解释中字符的例外意义。在文件中,跟在\末端的一个字符不会被shell特殊表达,但其余的不受影响。

echo “UID id : $UID”

command > outputfile
>会覆盖已有的文件

1.7          []中括号, 首如若用来测试条件的,经常位于if语句的末尾。
(然而仍然不太了然),不过中括号本身不会在测试语句执行后消失。

概念用户变量的时候不可能冒出空格:var=100

>>来充实数据

1.7.1     echo [$HOME]   (结果:出现谬误)

  1. 反引号

输入重定向
<
命令总是在左边,重定向符号指向数据流动的来头,表示从输入文件流向命令
wc < test6

1.7.2     echo [$HOME ]   (结果:[/home/xiongguoan ])
(注意:HOME前面有空格哦。)

Linux中的反引号可以将shell命令的出口赋值给变量:

内联输入重定向<<
指定一个文本标记来划分要输入数据的起头和结尾

1.7.3     echo [$HOME –eq ‘/xiong’]  (结果:[/home/xiongguoan –eq
/xiong])

#!/bin/bash

command << marker
data
marker

 

test=`date`

譬如那样
wc << EOF
test string 1
test string 2
test string 3
EOF

1.8          {}大括号,紧若是和$符号同盟,作为字符串连接来使用

echo $test

代表将下令的输出重定向到文件,可以重定向输出到另一个指令,那么些进程是管道连接

1.8.1     echo ${HOME}ismydir   (结果:/home/xiongguoanismydir)

  1. 重定向输入输出

command1 | command2
Linux系统其实会同时运行那四个指令,系统里面连接起来,首个指令暴发输出的同时,输出会立刻被送到第四个指令,传输数据不会用到任何中间文件和缓冲区域

 

输出:将下令执行的结果输出到文件中保存

管道最流行的用法是将下令发生的长输出结果通过管道传送给more命令
对ls命令卓殊普遍,可以强制在每屏数据的结尾停下来
ls -l | more“`

2           预定义的变量

输入:将文件输入给命令使用

施行数学运算

2.1          特殊变量

重定向输出使用过量号:>

使用expr命令
expr 1 + 5

expr也可以识别其他的操作符
如> < | & <= >= = != + - * / %
index  length

expr 5 \* 2
将星号转义,因为*表示通配符

要在shell脚本中将一个数学算式的结果赋给一个变量,需要反引号来获取expr命令的输出

var3=`expr $var2 / $var1`
或者var3=$(expr $var2 / $var1)```


###执行数学表达式更简单的方法

$[ operation ]
var1=$[ 1 + 5 ]
echo $var1

再者永不误解乘号

var2=$[ $var1 * 2 ]

bash shell只帮助整数运算“`

退出脚本

退出状态码,命令停止运行的时候传给shell,捕获那些值并且在剧本中运用

$? 成功的时候为0

exit命令
shell脚本会以脚本中最终一个发令的退出状态码退出

exit可以指定一个退出状态码

 

重定向输入使用小于号:<

$      shell变量名的起来,如$var

#!/bin/bash

|      管道,将正式输出转到下一个指令的规范输入

date > test6

$#     记录传递给Shell的自变量个数

test6<wc

#      注释伊始

  1. 管道

&      在后台执行一个经过

管道是将一个限令的出口作为下一个下令的输入,比如:

?     匹配一个字符

#!/bin/bash

*      匹配0到多少个字符(与DOS分歧,可在文件名中级使用,并且含.)

set | more

$-     使用set及举行时传递给shell的标志位

  1. 数学运算

$!     最后一个子进度的进度号 

Linux shell中使用expr作为整数的演算,使用bc举办浮点数的演算,比如:

$?     取近来三次命令执行后的脱离状态(再次回到码)

#!/bin/bash

$*     传递给shell script的参数

test1=`expr 1 \* 5`

$@     所有参数,个其他用双引号括起来

echo $test1

$0     当前shell的名字

var1=`echo ” scale=4; 3.44 / 5″ |bc`

$n     (n:1-) 地方参数

echo $var1

$$     进度标识号(Process Identifier Number, PID)

  1. 脱离脚本

>      输出重定向

#!/bin/bash

  <      输入重定向

exit 5

  >>      输出重定向(追加方式)


  []     列出字符变化范围,如[a-z]

技能树.IT修真院

 

“我们相信芸芸众生都足以改为一个工程师,现在起来,找个师兄,带您入门,掌控自己读书的韵律,学习的途中不再盲目”。

 

此处是技巧树.IT修真院,多如牛毛的师兄在那里找到了和睦的读书路线,学习透明化,成长可知化,师兄1对1免费引导。快来与自己一同读书吧

2.2          代值变量

挂号诚邀码:99872160    
 注册链接:IT修真院

 

* 任意字符串 

? 一个任意字符 

[abc] a, b, c三者中之一 

[a-n] 从a到n的任一字符 

 

 

2.3          特殊字符的表明

 

\b 退回 
\c 打印一行时尚未换行符 这一个大家平时会用到 
\f 换页 
\r 回车 
\t 制表 
\v 垂直制表 
\\ 反斜线本身 

 

2.4          其余字符

2.4.1     分号

; 表示一行停止

2.4.2     圆括号

()
表示在新的子shell中执行括号内的通令(那样可以不改动近年来shell的气象。)

而是圆括号在单/双引号内失去效能,只当做一般字符。

2.4.3     花括号

2.4.3.1    分割命令的用法

与圆括号一般,不过:1.
花括号内的吩咐在眼前shell中实践;2.花括号必须作为命令的首个字符出现。

2.4.3.2    引用变量的用法

在$后边,表示变量名的起初和完工

 

2.4.4     方括号

一定与test命令,用来实施测试条件,平常用在急需看清标准的言辞前边,例如:if,while等等。

 

 

3           设置变量

3.1          格式:VARNAME=value (i.e. PARAM=’hello’)

3.2          注意:

3.2.1     等号的内外无法有空格

3.2.2     要是变量的值是一个发令的履行结果,请加上反引号(`)。

 

4           引用变量

4.1          $VARNAME

4.1.1     e.i.  echo $HOME   (结果:/home/xiongguoan)

4.2          变量默许值

4.2.1    
在引用一个变量的时候可以设定默许值。假使在此从前,该变量已经设定了值,则此默许值无效。如果那时变量没有被设定值,则运用此默许值(可是从未改观此变量的值)。

4.2.2     echo Hello ${UNAME:-there}     #其中there是UNAME的默许值

4.2.3     其余关于默许值与判读变量的主意:

 

接纳大括号表示变量替换

表示形式

说明

${VARIABLE}

基本变量替换。大括号限定变量名的开始和结束

${VARIABLE:-DEFAULT}

如果VARIABLE没有值,则这种表示形式返回DEFAULT的值

${VARIABLE:=DEFAULT}

如果VARIABLE没有值,则这种表达形式返回DEFAULT的值。另外,如果VARIABLE没有设置,则把DEFAULT的值赋予它

${VARIABLE:+VALUE}

如果VARIABLE被设置,则这种表示形式返回VALUE;否则,返回一个空串

${# VARIABLE}

这种表示形式返回VARIABLE值的长度,除非VARIABLE是* 或者@在为*或者@的特殊情况下,则返回$@所表示的元素的个数。要记住,$ @保存传给该脚本的参数清单

${VARIABLE:?MESSAGE}

如果VARIABLE没有值,则这种表示形式返回MESSAGE的值。Shell也显示出VARIABLE的名字,所以这种形式对捕获得错误很有用

 

 

4.2.4     注意:

4.2.4.1   
使用${VALIABLE:?MESSAGE},若是发现此变量此时从未值,则脚本甘休运转并突显行号和变量名称。
首要用来调试。

4.2.4.2     

 

5           地点变量

5.1         
使用$1,$2,$3…$9,${10},${11}…来代表输入的参数。其中$0代表被执行的授命或者脚本的名字。$1,$2…意味着输入的第1,2…个参数

5.2          例子:

# cat count.sh#!/bin/sh

A=$1             # 将位置$1的数值读入,并赋给变量A

B=$2             # 将地方$2的数值读入,并赋给变量B

C=$[$A+$B]       # 将变量A与B的值相加,将结果赋给C

echo $C          # 显示C的数值

 

结果:

# ./count.sh  3  6

9

# ./count.sh 34  28

62

5.3          $@和$*代表参数的列表,$#表示参数的数码
(不通晓$@和$*里头的歧异)

 

 

6           运算符和优先级

 

Shell运算符和它们的先期级依次

级别

运算符

说明

13

-, +

单目负、单目正

12

!, ~

逻辑非、按位取反或补码

11

* , / , %

乘、除、取模

10

+, –

加、减

9

<< , >>

按位左移、按位右移

8

< =, > =,  < , >

小于或等于、大于或等于、小于、大于

7

= = , ! =

等于、不等于

6

&

按位与

5

^

按位异或

4

 |

按位或

3

&&

逻辑与

2

| |

逻辑或

1

=, + =, – =, * =, /=, % =, & =, ^ =, | =, << =, >> =

赋值、运算且赋值

 

 

 

7           source / export / let /
unset

7.1          source

7.1.1    
正常情状下,脚本中施行的参数设置只好影响到shell脚本本身的实施环境,无法影响到调用此shell的剧本。

7.1.2    
使用source命令执行脚本,可以让脚本影响到父shell的条件(即调用此shell的近年来shell)。

7.1.3     例如:source env.sh

7.2          export

7.2.1    
在bash下,使用export建立环境变量后,会潜移默化到子shell脚本和当下shell的环境变量

7.3          unset

7.3.1     删除环境变量

7.3.2     i.e.

#export newval=1

#echo $newval

1

#unset newval

#echo $newval

    (ß此处为空行,newval已经被删去)

7.4          let

7.4.1    
在bash中只用此命令能够建立一个临时的变量,此变量不会潜移默化到子shell

 

8            逻辑判断

8.1          if

8.1.1     单格式与嵌套

 

if 条件发挥式 
then #当条件为真时执行以下语句 
命令列表 
else #为假时履行以下语句 
命令列表 
fi

* *

*if 语句也得以嵌套使用 

if 条件表达式1 
then 
if 条件表明式2 
then 
命令列表 
else 
if 条件表明式3 
then 
命令列表 
else 
命令列表 
fi 
fi 
else 
命令列表 
fi *

 

8.1.2     多分支格式

 

if test -f “$1” 
then 
lpr $1 
elif test -d “$1” #elif 同else if 
then 
(cd $1;lpr $1) 
else 
echo “$1不是文本或目录” 
fi

 

8.2          case

8.2.1     格式

case $newval in

1)          #此处是唯恐值1

echo 1

;;      #表示第三个分支为止

2)           #此间是可能值 2

echo 2

;;      #其次个分支截至

*)      #表示其他可能值,必须在最终,否则他背后的话语不可能实施

echo unkown

esac    #case 语句甘休

8.2.2      

8.3          while /until

8.3.1     格式

while 表达式

do

指令列表

done

 

8.3.2     例如:

Sum=0 
i=0 
while true #true是系统的根本词 表示真 
do 
i=`expr $i + 1` 
Sum=`expr $Sum + $i` 
if [ $i = “100” ] 
then 
break; 
fi 
done 
echo $i $Sum 
终极那么些顺序彰显的是 100 5050 

* *

*上边将以此顺序再变更一下 

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 
时循环,也就是测试条件为真时循环. *

 

8.4          for

8.4.1     枚举用法

8.4.1.1    格式

 

 

for 变量 in 名字列表 
do 
命令列表 
done 

* *

8.4.1.2    格式

for n in {1..10}

do

echo $n

done

* *

for letter in a b c d e;

do

echo $letter

done

* *

* *

8.4.2     文件用法

 

8.4.2.1    格式

for file in *

do

       echo $file

done

 

8.4.2.2    例子

 

for File in a1 a2 a3 a4 a5 
do 
diff aa/$File bb/$File 
done 

* *

 

8.4.3     累加格式

for (( i=1;$i<10;i++))

do

echo $i

done

 

for(( i=1;$i<10;i=$[$i+1’ ])

do

echo $i

done

8.4.4      

8.5          其余循环控制语句

break 命令不履行当前循环体内break下边的话语从眼前循环退出. 
continue 命令是程序在本循体内忽略上面的言语,从循环头开头执行.

* *

8.6          逻辑判断的抒发

 

*一、判断文件的属性 

格式:-操作符 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 

二、测试字符串 
字符串1 = 字符串2 当八个字串相等时为真 
字符串1 != 字符串2 当五个字串不等时为真 
-n 字符串      当字符串的尺寸当先0时为真 
-z 字符串      当字符串的长度为0时为真 
字符串       当串字符串为非空时为真 

三、测试多少个整数关系 
数字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为真 

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

 

9           shell中的表达式

9.1          shell 输出重定向

9.1.1     管道  |

就管道符前的下令的出口作为管道符后的下令的输入。

 

ls | grep ‘.txt’

将ls的输出作为grep 的输入。 grep从输入中找出所有包涵.txt的行。

 

9.1.2     输出  >

将右尖括号前的下令的输入重定向到尖括号后的公文中。

 

例如:

ls *.sh > list.txt

将当前目录下所有末尾名为sh的文本的列表写入到list.txt

 

9.1.3     输入 <

将左箭头前边的文书作为左箭头前的下令的输入。

例如:

grep “a” < test.sh

将test.sh中找到所有包涵a的行

 

9.1.4     错误输出重定向

默许bash有3个规范输入输出设备。

0 标准输入

1 标准输出

2不当输出

 

设若履行脚本的时候暴发错误,会输出到2上。

要想就将错误的出口也出口在规范输出上,要求重定向。

例如:

./test.sh > a.log 2>&1

末尾2>&1就是将正式错误的输出重定向到正规输出上。

 

9.2          tee

9.2.1     将此命令的输入分叉,一支输出到屏幕一支可以重定向到其余职位。

例如: ./test.sh | tee >a.txt 2>&1

运作test.sh,通过tee输出到a.txt,同时显示器上可以见见输出。并且将错误输出重定向到正式输出(
2>&1 )

9.3          cpio

9.3.1     文件或目录打包

9.3.1.1    含子目录打包

  find . -name ‘*.sh’ | cpio -o > shell.cpio

  将当前目录及其子目录下的sh文件打包成一个文件库为shell.cpio。 

9.3.1.2    不含子目录的卷入

ls *.sh | cpio -o > shell.cpio

  将当前目录下的sh文件(不含子目录)打包成一个文本库为shell.cpio。 

9.3.2      压缩

文本打包完毕后,即可用Unix中的compress命令(/usr/bin下)压缩打包文件。对一般的公文文件,压缩率较高,可达81%。

比如说:compress
shell.cpio则将文件库压缩为shell.cpio.Z(自动添加.Z并剔除shell.cpio
)。 

9.3.3      解压

uncompress shell.cpio.Z则自动还原为shell.cpio。 

9.3.4      解包展开

将按原目录结构解包展开到近期所在目录下。若以相对路径打包的,当解包展开时,也是以相对路径存放展开的文本数量;若以相对路径打包的,当解包展开时,也是以绝对路径存放展开的公文数量。因而注意若为相对路径,应先进入相应的目录下再开展。 

 

 cd /u1

 cpio –id < shell.cpio 解压到当期目录。 

 cpio –iud < shell.cpio则文件若存在将被覆盖,即强制覆盖。 

 cpio –id < shell.cpio env.sh 解压缩env.sh

9.3.5      突显包内的文书

  cpio –it < shell.cpio  

澳门金沙国际 , 

9.4          exec

9.4.1    
将此命令后的参数作为命令在时下的shell中实践,当前的shell或者脚本不在执行。

例如: exec ls

眼前进程替换为ls,执行落成后就淡出了。

例如:在a.sh 中包含

exec b.sh 则当a.sh
执行到此句后,被b.sh替换,a.sh中此句后的语句不会再被执行。

 

9.5          fork

9.5.1     将此命令的参数,新建一个进度来执行

 

例如:在a.sh 中包含

fork b.sh 则当a.sh
执行到此句后,被b.sh替换,a.sh中此句后的言语继续执行。b.sh在新的经过中同时实施。

 

9.6          expr

9.6.1     expr argument operator argument

9.6.2     一般用于整数的运算。 例如:

#set newval=1

#echo $newval

1

#set newval=`expr $newval + 1`

#echo $newval

2

#set newval=$newval+1

#echo $newval

2+1

 

9.7          test

9.7.1     测试,常常用在急需看清的言语前面,例如:if,while,等等。

9.7.2     很多时候可以和中括号[]互换,我不亮堂分化是哪些。

9.7.3     例子:

i=1

if test”$ i” == “1”

then

echo true

else

echo false

fi

 

9.8          exit

脱离当前的shell,执行结果能够在shell中用$?查看

例如:exit 2

9.9          read

从标准输入读取数据。

例:
$ read var1 var2 var3
Hello my friends
$ echo $var1 $var2 $var3
Hello my friends
$ echo $var1
Hello

 

9.10       shift

9.10.1
每一遍调用的时候,将参数列表中的第二个参数去掉。那样可以循环获得第二个参数。

9.10.2 例子

#cat t.sh

sum=0

until [ $# -eq 0 ]

do

echo $*

sum=`expr $sum + $1`

shift

done

echo result is: $sum

 

#./t.sh 1 2 3

1 2 3

2 3

3

 

 

10       附件一:例子脚本

10.1        脚本1

 

10.2        

11       附件二:Linux
易被遗漏的吩咐解析

11.1       grep

11.1.1 grep ‘string’ filename

11.1.1.1e.i.: grep ‘list’ mytxt.txt
在mytxt.txt中搜寻包涵list字符串的有着行

11.1.2 “-v” : 相反的。 即不包涵字符串。

11.1.2.1e.i.: grep –v ‘list’ mytxt.txt

11.1.3 cat mytxt | grep ‘list’

将cat mytxt作为源, 从中查找包括list字符串的行

11.2       find

11.2.1 -atime n : 指查找系统中最后n*24小时访问的文本;

11.2.2 -ctime n : 指查找系统中最后n*24时辰被改成状态的文本;

11.2.3 -mtime n : 指查找系统中最后n*24小时被涂改的文本。

11.2.4
在当前目录下(包含子目录),查找所有txt文件并找出含有字符串”bin”的行
find ./ -name “*.txt” -exec grep “bin” {} \;

11.2.5 在当前目录下(包涵子目录),删除所有txt文件
find ./ -name “*.txt” -exec rm {} \;

 

11.3       du

11.3.1 呈现文件的轻重缓急

11.3.2 i.e.

#du *.txt

1230   myfile1.txt

456    myfile2.txt

 

11.4       awk

11.4.1 提取输入中的某个参数

11.4.2 i.e. 提取输入中每一行的率先个参数

#echo `du *.txt | awk ‘{print $1}’`

1230 456

领取子字符串

#echo `du *.bin | awk ‘{print substr($1,2,3)}’`

 

11.5       前后台运行

11.5.1 将某个程序在后台启动起来,只必要在命令的尾声加上 & 符号。

例如: ./test.sh &

 

11.5.2 将眼前正值运转的先后切换来后台

11.5.2.1当按下^z的时候,当前的应用程序就会切换来后台,不过此时的情景是甘休的场地。

11.5.2.2利用jobs命令可以见见眼前在后台运行的次第的列表。

例如:jobs

[1]+ stopped top

[2]+stopped find | grep *.txt > a.log

 

11.5.2.3用到bg命令可以将某个后台程序继续运行。

#bg %2

#jobs

[1]+ stopped top

[2]+ Running find | grep *.txt > a.log

 

11.5.3 将后台运行的次第切回到前台

#fg %2

将find 命令切回到前台

11.6       shell的实践选项

 

-n 测试shell script语法结构,只读取shell script但不执行
-x 进入跟踪办法,展现所实施的每一条命令,用于调度
-a Tag all variables for export
-c “string” 从strings中读取命令
-e 非交互方式
-f 关闭shell文件名暴发效果
-h locate and remember functions as defind
-i 交互格局
-k 从环境变量中读取命令的参数
-r 限制措施
-s 从正式输入读取命令
-t 执行命令后脱离(shell exits)
-u 在轮换中如运用未定义变量为不当
-v verbose,显示shell输入行

 

11.7       alias

树立别名

alias dir ls

11.8        xargs

推行本命令的第二个参数,并将xargs的输入作为被执行命令的参数

例如:

find . -name ‘*.c’ | xargs cat

将本目录及其子目录下拥有的C文件使用cat命令突显其内容。

 

12      
附件三:Bash中影响环境变量的命令

 

Shell有好多以变量为工作对象的吩咐,其中多少命令如同再一次了。例如,可以用declare、export和typeset命令来创设全局(或转出)的变量。typeset命令是declare的同义词。

 

Declare 命令

 

语法:

declare [options] [name [= value]]

 

摘要:

用以显示或安装变量。

declare命令使用多少个选拔:

-f   只显示函数名

-r  
创设只读变量。只读变量无法被赋予新值或废除设置,除非采取declare或者typeset命令

-x   创立转出(exported)变量

-i  
创设整数变量。假设大家想给一个整数变量赋予文本值,实际上是赋予0使用+
代替-,可以颠倒选项的意思。

 

假定没有使用参数,则declare显示当前已定义变量和函数的列表。让大家关切一下-r选项:

 

$ declare  –r  title=” paradise Lost”

$ title = ” Xenogenesis”

bash: title: read-only variable

$ declare title= ” Xenogenesis”

$ echo $title

Xecogenesis

$ typeset title = ” The Longing Ring”

$ echo $title

The Longing Ring

 

这么些示例表明,唯有declare或typeset命令可以修改只读变量的值。

 

 

 

export命令

 

语法:

 export [options] [name [= value]]

摘要:

用以创立传给子Shell的变量。

export命令使用三个选拔:

—   讲明选项截止。所有继续参数都是实参

-f   注明在“名-值”对中的名字是函数名

-n   把全局变量转换成局地变量。换句话说,命名的变量不再传给子Shell

-p   显示全局变量列表

 

如若没有用参数,则只若是一个-p参数,并且出示出全局变量的列表:

 

$ export

declare –x ENV = “/home/medined/ . bashrc”

declare –x HISTFILESIZE = “1000”

declare –xi numPages = “314”

declare –xr title = “The Longing Ring”

declare –xri numChapters = “32”

 

那种呈现的一个诙谐的特点是,它报告我们什么样变量只可以是整数、是只读的,或者双方皆可。

 

let命令

 

语法:

let expression

摘要:

用以求整数表明式的值。

 

let命令总括整数表明式的值。它经常用来充实计数器变量的值,如例5-9所示。

 

例5-9 let——使用let命令

# ! /bin/bash

count=1

for element in $@

do

   echo ” $element is element $count”

   let count+=1

done

 

上面是以此剧本运行结果示例:

$ chmod + x let

$ . /let one two three

one is element 1

two is element 2

three is element 3

 

留神:即使大家习惯在表明式中行使空格,那么要用双引号把发布式括起来,如:

let “count + =1”

要不会导致语句错误。

 

local 命令

 

语法:

       local [name [= value]]

摘要:

       用于创设无法传给子Shell的变量。那些命令仅在经过之中有效。

 

粗略说来,local命令创造的变量不可能被子Shell存取。由此,只可以在函数内部选拔local命令。大家得以在命令行或脚本中利用“变量=值”那种样式的赋值命令。借使应用local时不带实参,那么当前已定义的片段变量列表就送往专业输出显示。

 

readonly命令

 

语法:

       readonly [options] [name[ = value]]

摘要:

用以显示或者设置只读变量。

Readonly命令使用多少个选拔:

—    评释选项为止。所有继续参数都是实参

-f    创制只读函数

 

如若没有用参数,则readonly呈现当前已定义的只读变量和函数的列表。

 

set命令

 

语法:

       set [–abefhkmnptuvxidCHP] [-o option] [name [= value]]

摘要:

用来安装或者重置各样Shell选项。

 

set
命令可完结广大见仁见智的功用——并非其中具有的功力都与变量有关。由于本节的其余命令重复了通过set命令可用的那个变量选项,所以那边对set命令不做详细表明。

 

shift命令

 

语法

shift [n]

摘要:

用以移动地方变量。

 

shift命令调整地点变量,使$3的值赋予$2,而$2的值赋予$1。当执行shift命令时,那种波动功能影响到所定义的相继岗位变量。往往拔取shift命令来检查进度参数的特定值——如为挑选设置标志变量时。

 

typeset命令

 

语法:

typeset [options] [name [= value]]

摘要:

用来体现或者设置变量。

 

typeset 命令是declare命令的同义词。

 

 

unset命令

 

语法:

unset [options] name [name …]

摘要:

用来废除变量定义。

unset命令使用五个挑选:

—  阐明选项截至,所有继续参数都是实参

-f  成立只读函数

 

unset命令从Shell环境中删除指定的变量和函数。注意,无法撤消对PATH、IFS、PPID、PS1、PS2、UID和EUID的安装。若是大家废除RANDOM、SECONDS、LINENO或HISTCMD等变量的装置,它们就错过特有属性。

相关文章