Linux shell编程学习笔记Word下载.docx
《Linux shell编程学习笔记Word下载.docx》由会员分享,可在线阅读,更多相关《Linux shell编程学习笔记Word下载.docx(25页珍藏版)》请在冰豆网上搜索。
硬连接lnsourcefiletargetfile
连接后的target文件大小和source文件一样
软连接ln-ssourcefiletargetfile
类似于windows的快捷方式
●shellscript基本结构
#!
/bin/bash
--------bashshell开头必须部分
#description
--------注释部分(可有可无,为了阅读方便最好加以说明)
variablename=value
---------变量部分,声明变量,赋值
controlsegment
---------流程控制结构,如判断、循环、顺序
eg.
helloworld.sh
#!
/bin/bash
#Thisisahelloworldshellscript
printchar="
helloworld"
echo$printchar
[test@szbirdora1]$shhelloworld.sh
helloworld
●shell特性
①别名
alias
eg.aliasll=“ls-l”
②管道
a|b
将a命令的输出作为b命令的输入eg.ls|sort
将ls列举的项排序
③命令替换
a`b`
将b命令的输出作为a命令的输入eg.
ls`catmyfile`列举出catmyfile的输出项
④后台运行
nohupcommand&
可通过jobs-l查看后台运行的脚本
⑤重定向
>
<
可以改变程序运行的输出来源和输入来源
⑥变量
可以用$varname来调用变量
⑦特殊字符
`用来替换命令
\用来使shell无法认出其后的特殊字符,使其失去特殊含义
;
允许一行放多个命令
()创建成组的命令
?
?
{}创建命令块
第二章:
变量和运算符
●本地变量:
在用户现在的shell生命期的脚本中使用。
设置变量:
various_name=value.可用set来查看。
用readonly可以使变量只读。
●环境变量:
用于当前用户下所有用户进程(不限于现在的shell)。
设置变量:
exportvarious_name=value。
用env查看。
用readonly可以使变量只读。
●变量替换
echo${variablename}
显示实际值到variablename
echo${variablename:
+value}
如果设置了variablename,则显示其值,否则为空
?
value}
如果未设置variablename,则显现用户定义错误信息value
-value}
如果未设置,则显示其值
=value}
如果未设置,则设置其值,并显示
●清除变量
unsetvariablename
●位置变量
位置变量表示$0,$1,$2...$9
$0----脚本名字
$1----根据参数位置表示参数1
#parm.sh
echo"
Thisisscriptname:
$0"
Thisisparameter1:
$1"
Thisisparameter2:
$2"
[test@szbirdora1]$shparm.shab
parm.sh
a
b
●向系统中传递位置变量
/bin/bash
find/u01/test/1-name$1-print
[test@szbirdora1]$shparm.shmyfile
/u01/test/1/myfile
●标准变量
bash默认建立了一些标准环境变量,可在/etc/profile中定义
EXINIT
HOME
IFS
LOGNAME
--当前登录用户名
MAIL
MAILPATH
PATH
TERM
--终端信息
TZ
--时区
PS1
--登录提示,如[test@szbirdora1]$
[test@szbirdora1]$echo$PS1
[\u@\h\W]\$
--\u-user--\h-host--\W-document
PS2
--一命令多行,换行提示,如>
PWD
--当前目录
MAILCHECK
--每隔多少秒检查是否有新邮件
[test@szbirdora1]$echo$MAILCHECK
60
SHELL
MANPATH
--帮助文档位置
TERMINFO
--终端信息
●特殊变量
$#
传递到脚本的参数个数
$*
以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个
$$
脚本运行的当前进程ID号
$!
后台运行的最后一个进程的进程ID号
$@
传递到脚本的参数列表,并在引号中返回每个参数
$-
显示shell使用的当前选项,与set命令功能相同
$?
显示最后命令的退出状态,0表示没有错误,其他表示有错误
#parm
thisisshellname:
thisisparm1:
thisisparm2:
showparmnumber:
$#"
showparmlist:
$*"
showprocessid:
$$"
showprecommstat:
$?
"
[test@szbirdora1]$shparm.shab
ab
24544
●影响变量的命令
declare设置或显示变量
-f
只显示函数名
-r
创建只读变量
-x
创建转出变量
-i
创建整数变量
使用+替代-,可以颠倒选项的含义
export
-p
显示全部全局变量
shift[n]
移动位置变量,调整位置变量,使$3赋予$2,使$2赋予$1
n前移n
typeset
和declare同义
注意:
双引号不能解析$,\,`三个字符,所以在双引号中可以引用变量、转义字符、替换变量
单引号可以解析,所以单引号中引用变量等无效
[test@szbirdora1]$echo"
$test"
test
[test@szbirdora1]$echo'
$test'
$test
●运算符类型
⒈按位运算符
~
取反
<
左移运算符
>
右移运算符
&
与
|
或
^
异或
$[]
表示形式告诉shell对方括号中表达式求值$[a+b]
2.逻辑运算符
||
=,!
=
3.赋值运算符
letvariablename1+=variablename1+varablename2
第三章shell的输入和输出
1.echo
echo[option]string
-e解析转移字符
-n回车不换行,linux系统默认回车换行
转移字符\c\t\f\n
#echo
echo-e"
thisecho'
s3newlne\n\n\n"
OK"
echo
thisisecho'
s3ewline\n\n\n"
thislogfilehaveallbeendone"
mylogfile.txt
[test@szbirdora~]$shechod.sh
s3newlne
OK
s3ewline\n\n\n
上面可以看到有-e则可以解析转移字符,没有不能解析。
echo空输出为空
2.read可以从键盘或文件的某一行文本中读入信息,并将其赋给一个变量
readvariable1variable2
#readname
echo-n"
firstname:
readfirstname
lastname:
readlastname
thisnameis$firstname$lastname"
3.cat
显示文件的内容,创建内容,还可以显示控制字符
cat[options]filename1filename2
-v
显示控制字符(Windows文件)
cat命令不会分页显示,要分页可以采用more、less
4.管道|
5.tee
把输出的一个副本输送到标准输出,另一个副本拷贝到相应的文件中,一般与管道合用
tee[options]files
-a在文件中追加
[test@szbirdora1]$echo|teemyfile
[test@szbirdora1]$catmyfile
将myfile文件置空
6.文件重定向
command>
filename
---覆盖输出
---追加输出
filename>
---把标准输出和标准错误重定向
command<
delimiter
---输入直到delimiter分解符
----输入文件内容到命令
-
---关闭标准输入
nullfile.txt
---创建字节为0的文件
command1<
command3
---按从左到右顺序执行
说明:
myfile为空间
[test@szbirdora1]$df-lh>
myfile
Filesystem
SizeUsedAvailUse%Mountedon
/dev/sda1
20G3.3G
16G18%/
none
2.0G
02.0G
0%/dev/shm
/dev/sda2
79G
17G
59G23%/u01
/dev/sda4
28G3.9G
22G15%/u02
[test@szbirdora1]$cat>
myfile<
exit
China
Hubei
Suizhou
exit
China
Hubei
Suizhou
7.exec
可以用来替代当前shell。
现有任何环境变量都会清除
第四章控制流结构
1.if语句
if条件1
then
命令1
elif条件2
命令2
else
命令3
fi
------------------
if条件
then命令
#iftest
#thisisacommentline
if["
10"
-lt"
12"
];
then
#yes10islessthan12
yes,10islessthan12"
no"
if语句必须以fi终止
"
前一个空格,“12”后也有一个空格。
这个条件都是通过test命令来指定。
条件表达为testexpression或者[expression]
条件表达式中的比较函数
mantest
NAME
test-checkfiletypesandcomparevalues
SYNOPSIS
testEXPRESSION
[EXPRESSION]
[OPTION
DESCRIPTION
ExitwiththestatusdeterminedbyEXPRESSION.
--helpdisplaythishelpandexit
--version
outputversioninformationandexit
EXPRESSIONistrueorfalseandsetsexitstatus.Itisoneof:
(EXPRESSION)
EXPRESSIONistrue
!
EXPRESSION
EXPRESSIONisfalse
EXPRESSION1-aEXPRESSION2
bothEXPRESSION1andEXPRESSION2aretrue
EXPRESSION1-oEXPRESSION2
eitherEXPRESSION1orEXPRESSION2istrue
[-n]STRING
thelengthofSTRINGisnonzero
-zSTRING
thelengthofSTRINGiszero
STRING1=STRING2
thestringsareequal
STRING1!
=STRING2
thestringsarenotequal
INTEGER1-eqINTEGER2
INTEGER1isequaltoINTEGER2
INTEGER1-geINTEGER2
INTEGER1isgreaterthanorequaltoINTEGER2
INTEGER1-gtINTEGER2
INTEGER1isgreaterthanINTEGER2
INTEGER1-leINTEGER2
INTEGER1islessthanorequaltoINTEGER2
INTEGER1-ltINTEGER2
INTEGER1islessthanINTEGER2
INTEGER1-neINTEGER2
INTEGER1isnotequaltoINTEGER2
FILE1-efFILE2
FILE1andFILE2havethesamedeviceandinodenumbers
FI