Ubuntu系统的Shell命令及脚本编程
Ubuntu系统的Shell命令及脚本编程
Shell是Linux的命令解释器,是连接⽤户和内核的桥梁。Linux命令通过Shell传给内核,内核执⾏命令并将结果返回给Shell,Shell再把结果输出到显⽰器或其他设备。
常⽤Shell有bash、csh、ksh,Ubuntu默认的Shell是bash。
⼀、变量与特殊字符
1)局部变量:在设定此变量的Shell中有效
例1:设定局部变量ylsy、显⽰变量值、取消变量。
zgj@wildgrass:~$ ylsy="Yulin Normal University"
zgj@wildgrass:~$ echo $ylsy
Yulin Normal University
zgj@wildgrass:~$ unset ylsy
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$ gedit myshell1.sh
echo $1 $2
echo $0
#!/bin/bash
echo $#
echo $$
echo $?
执⾏脚本程序myshell1.sh:
zgj@wildgrass:~/UbunFiles$ ./myshell1.sh Hello BoysAndGirls
4)特殊字符
“”(双引号)中出现的 [单引号、$、\]作为特殊字符
zgj@wildgrass:~/UbunFiles$ version="Ubuntu 12.04 LTS"
zgj@wildgrass:~/UbunFiles$ echo "version is: $version"
version is: Ubuntu 12.04 LTS
zgj@wildgrass:~/UbunFiles$ echo "version is:\$version"
version is:$version
linux循环执行命令脚本
zgj@wildgrass:~/UbunFiles$ echo "version is:'$version'"
version is:'Ubuntu 12.04 LTS'
⼆、通配符与正则表达式
1)?:匹配⼀个字符
2)*:匹配多个字符
3)[]:匹配[]⾥指定字符范围的任意⼀个字符
4)[!] 或[^]:表⽰不匹配[]⾥指定字符范围的所有字符
例3:显⽰以exp开头,第4个字符为数字[0-9],扩展名的第1个字符不是[r-z]、第2个字符不是o或x的所有⽂件和⽬录信息。
zgj@wildgrass:~/UbunFiles$ ls exp[0-9]*.[!r-zR-Z][^oOxX]*
exp0.cp exp3.java exp5.1ps exp5a.cs
exp5b.ja exp7.cpp exp8.dt exp9.cbp
5)正则表达式
grep [正则表达式] filename :显⽰与 [正则表达式] 匹配的⽂件信息。
zgj@wildgrass:~/UbunFiles$ grep "Happy" *.*
myshell2.sh:echo "Happy Spring Festival!"
myshell2.sh~:echo "Happy Spring Festival!"
zgj@wildgrass:~/UbunFiles$ grep "排序" *.*
exp1.c: printf("排序前:");
exp1.c: printf("\n排序后:");
三、命令的执⾏顺序
1) cmd1 && cmd2 && cmd3 &&...:cmd1执⾏成功才执⾏cmd2,cmd2执⾏成功才执⾏ zgj@wildgrass:~/UbunFiles$ mkdir testcmd && cd testcmd && pwd
/home/zgj/UbunFiles/testcmd
2) cmd1||cmd2||cmd3||... :cmd1执⾏失败才执⾏cmd2, cmd2执⾏失败才执⾏ zgj@wildgrass:~/UbunFiles$ mkdir testcmd || cd test || pwd
3) cmd1;cmd2;cmd3;... :连续执⾏cmd1,
zgj@wildgrass:~/UbunFiles$ mkdir testcmd ; cd testcmd ; pwd
mkdir: ⽆法创建⽬录"testcmd": ⽂件已存在
/home/zgj/UbunFiles/testcmd
zgj@wildgrass:~/UbunFiles/testcmd$
四、I/O重定向与管道
重定向
Linux使⽤0表⽰标准输⼊、1表⽰标准输出、2表⽰标准错误输出。
可以重新指定输⼊输出,<:表⽰输⼊重定向;>(>>):表⽰输出重定向。
zgj@wildgrass:~/UbunFiles$ ls -l &
2>:标准错误输出重定向
zgj@wildgrass:~/UbunFiles$ cd test 2&
zgj@wildgrass:~/UbunFiles$
bash: cd: test: 没有那个⽂件或⽬录
管道(|)
⼀个命令的输出作为另⼀个命令的输⼊。
五、Shell脚本编程
1. Shell脚本程序的编写
1)脚本的第⼀⾏⼀般写上”#!/bin/bash”,指明此脚本使⽤bash解释执⾏。
2)如果在⼀⾏之前使⽤了“#”字符,则该⾏是注释。
2. 脚本程序的执⾏过程
1)编写脚本:zgj@wildgrass:~/UbunFiles$ gedit myshell2.sh
2)默认的脚本程序权限为-rw-rw-r--,因此需要修改,添加“执⾏x”权限才能执⾏:
zgj@wildgrass:~/UbunFiles$ chmod 755 myshell2.sh
zgj@wildgrass:~/UbunFiles$ ls -l myshell2.sh -rwxr-xr-x 1 zgj zgj 65 2⽉ 16 20:36 myshell2.sh 3)执⾏Shell脚本程序
⽅法1:
zgj@wildgrass:~/UbunFiles$ ./myshell2.sh
春节快乐!
Happy Spring Festival!
⽅法2:
zgj@wildgrass:~/UbunFiles$ bash myshell2.sh 春节快乐!
Happy Spring Festival!
3. 编写交互式脚本
read [-p “字符串”] 变量名
例4:编写⼀个简单的交互式脚本程序
zgj@wildgrass:~/UbunFiles$ gedit myshell2.sh
zgj@wildgrass:~/UbunFiles$ bash myshell2.sh
4. 在脚本中使⽤数值变量和数组
例5:
zgj@wildgrass:~/UbunFiles$ gedit myshell3.sh
zgj@wildgrass:~/UbunFiles$ bash myshell3.sh
5. 逻辑判断与逻辑表达式
格式⼆:[ 条件 ]
1)对字符串进⾏判断
[ str1 = str2 ]:相等为真
[ str1 != str2 ]:不相等为真
[ -z str ]:str长度为零则为真
[ -n str ]:str长度不为零则为真
注:各选项之间⽤空格隔开
例6:
zgj@wildgrass:~/UbunFiles$ gedit myshell4.sh
zgj@wildgrass:~/UbunFiles$ ./myshell4.sh
2)对整数进⾏判断
[ int1 -eq int2 ]:相等为真
[ int1 -ne int2 ]:不相等为真
[ int1 -gt int2 ]:int1>int2为真
[ int1 -ge int2 ]:int1>=int2为真
[ int1 -lt int2 ]:int1
[ int1 -le int2 ]:int1<=int2为真
注:各选项之间⽤空格隔开
例7:
zgj@wildgrass:~/UbunFiles$ gedit myshell5.sh

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。