基于Ubuntu的Linux学习[shell编程]
1.定义
解释性的脚本语言,批量处理命令使用,类似windows下的.bat文件。属于Linux内核的一个外层保护工具,负责完成用户和内核之间交互。
2.查看
cat /etc/shells
3.规则
- 新建shell文件:vim + .sh后缀
- 运行环境设置:第一行
#!/bin/bash(声明shell类型bash shell)或者#!/bin/sh - 脚本语句编写:shell命令+系统命令,注释行以#开头
- 设置可执行性:
chmod +x xx.sh - 脚本的运行:shell命令程序执行;使用”.”执行脚本;直接执行具有可执行权限的脚本
- 执行脚本文件:
- 解析方式:
xx.sh ./xx.sh需要执行权限. xx.sh需要执行权限
- 解析方式:
Shell中的括号
Shell中的括号有其特殊的用法,现总结如下:
1. 符号$后的括号
${a}变量a的值,在不引起歧义的情况下可以省略大括号。$(cmd)命令替换,结果为shell命令cmd的输出,和 `cmd` 效果相同,不过某些Shell版本不支持$()形式的命令替换,如tcsh。$((exp))和 `expr exp` 效果相同,计算数学表达式exp的数值,其中exp只要符合C语言的运算规则即可,甚至三目运算符和逻辑表达式都可以计算。
2. 多条命令执行
(cmd1;cmd2;cmd3)新开一个子shell顺序执行命令cmd1,cmd2,cmd3,各命令之间用分号隔开,最后一个命令后可以没有分号。{ cmd1;cmd2;cmd3; }在当前shell顺序执行命令cmd1,cmd2,cmd3,各命令之间用分号隔开,最后一个命令后必须有分号,第一条命令和左括号之间必须用空格隔开。- 对{}和()而言,括号中的重定向符只影响该条命令,而括号外的重定向符影响到括号中的所有命令。
3. 双括号的特殊用法
(())增强括号的用法,常用于算术运算比较。双括号中的变量可以不使用$符号前缀,只要括号中的表达式符合C语言运算规则,支持多个表达式用逗号分开。比如可以直接使用for((i=0;i<5;i++)),如果不使用双括号,则为for i in \seq 0 4`或者for i in {0..4}。再如可以直接使用if (($i<5)),如果不使用双括号,则为if [ $i -lt 5 ]`。-
[[ ]]增强方括号用法,常用于字符串的比较。主要用于条件测试,双括号中的表达式可以使用&&、、<、>等C语言语法。比如可以直接使用 if [[ $a != 1 && $a != 2 ]],如果不使用双括号,则为if [ $a -ne 1 ] && [ $a != 2 ]或者if [ $a -ne 1 -a $a != 2 ]。