Ubuntu系统的Shell命令及脚本编程.docx
- 文档编号:7257925
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:13
- 大小:330.52KB
Ubuntu系统的Shell命令及脚本编程.docx
《Ubuntu系统的Shell命令及脚本编程.docx》由会员分享,可在线阅读,更多相关《Ubuntu系统的Shell命令及脚本编程.docx(13页珍藏版)》请在冰豆网上搜索。
Ubuntu系统的Shell命令及脚本编程
Ubuntu系统的Shell命令及脚本编程
Shell是Linux的命令解释器,是连接用户和内核的桥梁。
Linux命令通过Shell传给内核,内核执行命令并将结果返回给Shell,Shell再把结果输出到显示器或其他设备。
常用Shell有bash、csh、ksh,Ubuntu默认的Shell是bash。
一、变量与特殊字符
1)局部变量:
在设定此变量的Shell中有效
例1:
设定局部变量ylsy、显示变量值、取消变量。
zgj@wildgrass:
~$ylsy="YulinNormalUniversity"
zgj@wildgrass:
~$echo$ylsy
YulinNormalUniversity
zgj@wildgrass:
~$unsetylsy
2)环境变量:
在整个系统环境中有效
查看环境变量env
zgj@wildgrass:
~$env
常用环境变量说明:
SHELL=/bin/bash--当前使用的shell
USER=zgj--当前登录的用户名
PATH=/usr/lib/lightdm/lightdm:
/usr/local/sbin:
/usr/local/bin:
/usr/sbin:
/usr/bin:
/sbin:
/bin:
/usr/games--命令执行时的搜索路径
PWD=/home/zgj--当前工作目录
LANG=zh_CN.UTF-8--当前的语系
3)参数变量与特殊变量
Shell命令格式:
命令名[选项]参数1参数2...
参数变量的表示方法:
$0:
表示执行的程序名
$1-$9:
表示传给程序的第1个----第9个参数
${大于9的数字}:
表示第10个、11个参数...........
特殊变量的表示方法:
$#:
表示参数变量的个数
$*:
表示所有的参数变量
$@:
表示所有参数变量的值
$$:
当前Shell的PID(进程ID)值
$?
:
最近一个执行过的命令的返回值
例2:
编写脚本程序,测试参数变量与特殊变量的值
编写脚本程序myshell1.sh:
zgj@wildgrass:
~/UbunFiles$geditmyshell1.sh
echo$1$2
echo$0
#!
/bin/bash
echo$#
echo$@
echo$$
echo$?
执行脚本程序myshell1.sh:
zgj@wildgrass:
~/UbunFiles$./myshell1.shHelloBoysAndGirls
4)特殊字符
“”(双引号)中出现的[单引号、$、\]作为特殊字符
zgj@wildgrass:
~/UbunFiles$version="Ubuntu12.04LTS"
zgj@wildgrass:
~/UbunFiles$echo"versionis:
$version"
versionis:
Ubuntu12.04LTS
zgj@wildgrass:
~/UbunFiles$echo"versionis:
\$version"
versionis:
$version
zgj@wildgrass:
~/UbunFiles$echo"versionis:
'$version'"
versionis:
'Ubuntu12.04LTS'
二、通配符与正则表达式
1)?
:
匹配一个字符
2)*:
匹配多个字符
3)[]:
匹配[]里指定字符范围的任意一个字符
4)[!
]或[^]:
表示不匹配[]里指定字符范围的所有字符
例3:
显示以exp开头,第4个字符为数字[0-9],扩展名的第1个字符不是[r-z]、第2个字符不是o或x的所有文件和目录信息。
zgj@wildgrass:
~/UbunFiles$lsexp[0-9]*.[!
r-zR-Z][^oOxX]*
exp0.cpexp3.javaexp5.1psexp5a.cs
exp5b.jaexp7.cppexp8.dtexp9.cbp
5)正则表达式
grep[正则表达式]filename:
显示与[正则表达式]匹配的文件信息。
zgj@wildgrass:
~/UbunFiles$grep"Happy"*.*
myshell2.sh:
echo"HappySpringFestival!
"
myshell2.sh~:
echo"HappySpringFestival!
"
zgj@wildgrass:
~/UbunFiles$grep"排序"*.*
exp1.c:
printf("排序前:
");
exp1.c:
printf("\n排序后:
");
三、命令的执行顺序
1)cmd1&&cmd2&&cmd3&&...:
cmd1执行成功才执行cmd2,cmd2执行成功才执行cmd3...
zgj@wildgrass:
~/UbunFiles$mkdirtestcmd&&cdtestcmd&&pwd
/home/zgj/UbunFiles/testcmd
zgj@wildgrass:
~/UbunFiles/testcmd$
2)cmd1||cmd2||cmd3||...:
cmd1执行失败才执行cmd2,cmd2执行失败才执行cmd3...
zgj@wildgrass:
~/UbunFiles$mkdirtestcmd||cdtest||pwd
3)cmd1;cmd2;cmd3;...:
连续执行cmd1,cmd2,cmd3....
zgj@wildgrass:
~/UbunFiles$mkdirtestcmd;cdtestcmd;pwd
mkdir:
无法创建目录"testcmd":
文件已存在
/home/zgj/UbunFiles/testcmd
zgj@wildgrass:
~/UbunFiles/testcmd$
四、I/O重定向与管道
重定向
Linux使用0表示标准输入、1表示标准输出、2表示标准错误输出。
可以重新指定输入输出,<:
表示输入重定向;>(>>):
表示输出重定向。
zgj@wildgrass:
~/UbunFiles$ls-l>lsubu.txt
2>:
标准错误输出重定向
zgj@wildgrass:
~/UbunFiles$cdtest2>err.txt
zgj@wildgrass:
~/UbunFiles$caterr.txt
bash:
cd:
test:
没有那个文件或目录
管道(|)
一个命令的输出作为另一个命令的输入。
五、Shell脚本编程
1.Shell脚本程序的编写
1)脚本的第一行一般写上”#!
/bin/bash”,指明此脚本使用bash解释执行。
2)如果在一行之前使用了“#”字符,则该行是注释。
2.脚本程序的执行过程
1)编写脚本:
zgj@wildgrass:
~/UbunFiles$geditmyshell2.sh
2)默认的脚本程序权限为-rw-rw-r--,因此需要修改,添加“执行x”权限才能执行:
zgj@wildgrass:
~/UbunFiles$chmod755myshell2.sh
zgj@wildgrass:
~/UbunFiles$ls-lmyshell2.sh
-rwxr-xr-x1zgjzgj652月1620:
36myshell2.sh
3)执行Shell脚本程序
方法1:
zgj@wildgrass:
~/UbunFiles$./myshell2.sh
春节快乐!
HappySpringFestival!
方法2:
zgj@wildgrass:
~/UbunFiles$bashmyshell2.sh
春节快乐!
HappySpringFestival!
3.编写交互式脚本
read[-p“字符串”]变量名
例4:
编写一个简单的交互式脚本程序
zgj@wildgrass:
~/UbunFiles$geditmyshell2.sh
zgj@wildgrass:
~/UbunFiles$bashmyshell2.sh
4.在脚本中使用数值变量和数组
例5:
zgj@wildgrass:
~/UbunFiles$geditmyshell3.sh
zgj@wildgrass:
~/UbunFiles$bashmyshell3.sh
5.逻辑判断与逻辑表达式
格式一:
test条件
格式二:
[条件]
1)对字符串进行判断
[str1=str2]:
相等为真
[str1!
=str2]:
不相等为真
[-zstr]:
str长度为零则为真
[-nstr]:
str长度不为零则为真
注:
各选项之间用空格隔开
例6:
zgj@wildgrass:
~/UbunFiles$geditmyshell4.sh
zgj@wildgrass:
~/UbunFiles$./myshell4.sh
2)对整数进行判断
[int1-eqint2]:
相等为真
[int1-neint2]:
不相等为真
[int1-gtint2]:
int1>int2为真
[int1-geint2]:
int1>=int2为真
[int1-ltint2]:
int1 [int1-leint2]: int1<=int2为真 注: 各选项之间用空格隔开 例7: zgj@wildgrass: ~/UbunFiles$geditmyshell5.sh zgj@wildgrass: ~/UbunFiles$bashmyshell5.sh 2013>2and2<=17 3)对文件的类型和属性进行判断 [-efile]: file存在为真 [-ffile]: file是一个普通文件为真 [-ddir]: dir是一个目录为真 [-Lfile]: file是一个链接文件为真 [-rfile]: file可读为真 [-wfile]: file可写为真 [-xfile]: file可执行为真 注: 各选项之间用空格隔开 例8: zgj@wildgrass: ~/UbunFiles$geditmyshell6.sh zgj@wildgrass: ~/UbunFiles$./myshell6.shhello.javaLnkSoftwaremain.c 6.多分支条件语句case 格式: case变量in value1) command1 ;; value2) command2 ;; …........... *) commandn ;; esac 注: 每个case语句块之后用;;结束 例9: zgj@wildgrass: ~/UbunFiles$geditmyshell7.sh zgj@wildgrass: ~/UbunFiles$shmyshell7.shmain.c 7.循环语句for、while、until 1)for语句 格式1: for变量in变量值1变量值2… do command done 格式2: for((i=1;i<=100;i++)) do command done 注: ((与))不能用空格分开 例10: zgj@wildgrass: ~/UbunFiles$geditmyshell8.sh zgj@wildgrass: ~/UbunFiles$bashmyshell8.sh 2)while与until语句 格式: while[条件] do command done 注: 条件成立时循环执行command,break退出循环 until[条件] do command done 注: 条件不成立时循环执行command,break退出循环 例11: 分别使用while、until循环计算1+2+...+100 zgj@wildgrass: ~/UbunFiles$geditmyshell9.sh zgj@wildgrass: ~/UbunFiles$./myshell9.sh 1+2+...+100=5050 1+2+...+100=5050 例12: 输入一个算术表达式,输出表达式的结果 zgj@wildgrass: ~/UbunFiles$bashmyshell10.sh
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Ubuntu 系统 Shell 命令 脚本 编程