1.焦点命令
touch 创造空文件(当然,你也足以选用echo >filename)
ln 创立链接符号(火速方式|引用):
- 标志链接:ln –s
- 硬链接:ln
区别:
- 标记链接暴发了一个连忙情势,是对源文件的一个链接。
- 硬链接是底层字节的链接,简而言之,相当于是一个文书,八个文本名,占用同样块扇区,好处是省空间,就算删除一个,只要还有硬连接,这一个文件就如故存在。
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条历史命令被执行
-
创制Shell脚本文件
-
体现音讯
-
应用变量
-
反引号
-
重定向输入输出
-
管道
-
施行数学运算
-
退出脚本
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 减小逻辑卷的大小
- 创办脚本文件的时候,必须将文件的率先行指定要动用的shell。其格式为:
echo 可以来得简单的文本字符串
2.shell编程
变量是宽大的定义,任何由字母、数字或下划线组成的文本字符串,长度不当先20个。用户变量区分轻重缓急写,所以变量
Var1 和变量 var1 是见仁见智的。
shell编程最强劲的地点在于可以从console的出口中取回那个输出,并随便拔取,一旦那样做,则足以拔取shell做此外业务了,只要你能在console中输出它。
如何从shell中获得输出的始末?二种方式:
- 反引号符号;
- $();
例如,使用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
#注意上式的空格,运算符间都是有的
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,仍然会转换成变量的值。)
字符串比较
str1=str2 | == |
!= | |
< | len |
> | len |
-n | len>0 |
-z | len=0 |
特意须要注意不难犯错误的地方在于符号会与bash本身的有些标志争论而致使执行出错!!!包蕴:
<,>.
所以要拓展转义,即:
\>,\<.
- 来得消息: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 | |
! | 非 |
~ | 按位非 |
** | 幂 |
<< | |
>> | |
& | 按位与 |
| | 按位或 |
&& | 逻辑与 |
|| | 逻辑或 |
测试进程中,发现,还帮衬广大操作:==,!=,<,>,<=,>=,+,-,*,/.
此外,(())不需求转义以及空格!!!
- 运用变量:
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] (结果:出现谬误)
- 反引号
输入重定向
<
命令总是在左边,重定向符号指向数据流动的来头,表示从输入文件流向命令
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)
- 重定向输入输出
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
# 注释伊始
- 管道
& 在后台执行一个经过
管道是将一个限令的出口作为下一个下令的输入,比如:
? 匹配一个字符
#!/bin/bash
* 匹配0到多少个字符(与DOS分歧,可在文件名中级使用,并且含.)
set | more
$- 使用set及举行时传递给shell的标志位
- 数学运算
$! 最后一个子进度的进度号
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)
- 脱离脚本
> 输出重定向
#!/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等变量的装置,它们就错过特有属性。