shell 脚本的学习与使用(一)

来源:互联网 发布:英雄联盟录制软件 编辑:程序博客网 时间:2024/05/17 09:32

shell 本身是一个用 c 语言编写的程序,又是一种解释型的语言。 是用户使用 Liunx 的桥梁

shell 两种执行命令的方式

1> 交互式 interactive : 解释执行用户的命令 , 用户输入一条命令, shell 就解释执行一条

2> 批处理 batch : 用户事先写一个 shell 脚本, 其中很多条命令,让 shell 一次把这些命令执行完


shell 的种类

shell 的种类 ,即是 shell 脚本解释器的种类。常见的 shell 脚本解释器有 bash、sh、csh、ksh 等。bash 是 Liunx 默认的 shell , sh 是 Unix 默认的 shell 。 bash 完全兼容 sh, 所以我们学习一般学习 bash , sh 即可。


第一个 shell脚本

打开文本编辑器,新建一个文件。扩展名为 sh
输入一些代码:

#!/bin/bashecho "hello world"

“#!” 是一个约定的标记,告诉系统这个脚本需要什么解释器来执行,echo 命令用与想窗口输出文本,类似于java 的 system.out。
运行脚本: chmod +X ./text.sh #使脚本具有执行权
.text.sh
注意需要将命令行目录切换到文件脚本所在目录, ./text.sh 就会直接在当前目录找。如果有配置环境变量即可写成 text.sh
这里写图片描述


shell 变量:

定义变量

定义变量时,变量名不加 $ 美元符号,如:

age="18"

需要注意的是,和你熟悉的编程语言不一样变量名和等号之间不能有空格

变量命名须遵循的规则如下:

  • 首字符必须为字母 (a-z ,A-Z)或 _ 下划线。
  • 变量名中间不能有空格
  • 不能使用标点符号
  • 不能使用bash里的关键字

使用变量

使用一个定义过的变量,只要在变量名前面加美元符号即可 $ ,如:

#!/bin/bashecho "what is your name?"NAME=tommyecho "my name is ${NAME}"

这里写图片描述

注意:外面的花括号是可选的。目的是为了区分变量名分界,例如变量名后面还需要输出其他字符串,推荐所有变量都加上花括号

重新定义变量

已经定义过的变量可以被重新定义。如:

#!/bin/bashage=18echo "age is ${age}"age=25echo "age is ${age}"

这里写图片描述

只读变量

使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。意思就是被执行过 readonly 的变量 是不能被二次赋值的 类似于 java 中的 final

例:

#!/bin/bashage=18echo "age is ${age}"readonly ageage=25echo "age is ${age}"

这里写图片描述

很明显的输出第五行,提示只读变量。二次赋值无效

删除变量

使用 unset 命令可以删除变量,变量被删除后不能再次使用;unset 命令不能删除只读变量

#!/bin/bashname="bob"unset nameecho "name is ${name}"

这里写图片描述

可以看到变量name 没有任何输出

变量类型

变量的类型分三种
-局部变量
-环境变量
-特殊变量

特殊变量列表

变量 含义 $0 当前脚本的文件名 $n 传递给脚本的函数的参数,n是一个数字,表示第几个参数 $# 传递给脚本或函数参数的个数 $* 传递给脚本或者函数的所有参数 $@ 传递给脚本或者函数的所有参数,与 $*是否被双引号包含的区别 $? 上个命令的退出状态,或者函数的返回值 $$ 当前 shell进程id,对于shell脚本,就是这些脚本所在的进程id.

命令行参数

运行脚本时传递给脚本的参数称作命令行参数。命令行参数用 $n 表示, 例如, \$1 表示第一个参数 \$2 表示第二个参数。依次类推(\为转义符号)

用法

#!/bin/bashecho "File name is $0"echo "Parameter 1 : $1"echo "Parameter 2 : $2"echo "$@"echo "$*"echo "size : $#"

这里写图片描述

$? 可以获取上个命令行的退出状态。所谓退出状态就是上个命令行执行后的返回结果。执行成功返回0 , 失败返回1。除此之外 \$? 还可以表示返回值


shell 替换

转义字符

转义字符 含义 \\ 反斜杠 \a 报警,响铃 \b 退格,删除键 \f 换页,将当前位置移到下页开头 \n 换行 \r 回车 \t 水平制表符

如果表达式中包含特殊字符, shell 将会进行替换。例如在双引号中使用变量就是一种替换,转义字符也是一种替换

echo - e 表示将特殊字符进行转义输出,否则反之

变量替换

变量替换可以根据变量的状态(是否为空 是否定义等) 来改变他们的值
可以使用的变量替换形式:

形式 说明 ${var} 变量本来的值 ${var:-word} 如果变量 var 为空或者已被删除 unset ,那么返回 word,但不改变 var 的值 ${var:=word} 如果变量 var 为空或者已被删除 unset,那么返回 word, 那么并将 var 的值设置为 word ${var:?msg} 如果变量 var 为空或者已被删除 unset,那么将消息 msg 送到标准错误输出,可以用来检测变量 var 是否可以被正常赋值。若此替换出现在 shell 中,那么脚本讲停止运行 ${var:+word} 如果变量 var 被定义,那么返回 word ,但不改变 var 的值
#!/bin/bashecho ${var:-"Variable is not set"}echo "1 - Value of var is ${var}"echo ${var:="Variable is not set"}echo "2 - Value of var is ${var}"unset varecho ${var:+"This is default value"}echo "3 - Value of var is $var"var="Prefix"echo ${var:+"This is default value"}echo "4 - Value of var is $var"echo ${var:?"Print this message"}echo "5 - Value of var is ${var}"

这里写图片描述


shell 运算符

Bash 支持很多运算符,包括算数运算符,关系运算符,布尔运算符,字符串运算符和文件测试运算符。
原生 bash 不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr , expr 最常用。
expr 是一款表达式计算工具,使用它能完成表达式的求值操作。
例:

#!/bin/bashvalue = `expr 2 + 2`echo -e "Total is ${value}"

这里写图片描述

注意:
- 表达式和运算符之间要有空格,例如 2+2 是不对的 2 + 2正解。变量与等号间不能有空格
- 完整的表达式需要被一对 ` 包含,不是单引号,此符号在 Esc 健下方

算数运算符

#!/bin/sha=10b=20val=`expr $a + $b`echo "a + b : $val"val=`expr $a - $b`echo "a - b : $val"val=`expr $a \* $b`echo "a * b : $val"val=`expr $b / $a`echo "b / a : $val"val=`expr $b % $a`echo "b % a : $val"if [ $a == $b ]then   echo "a is equal to b"fiif [ $a != $b ]then   echo "a is not equal to b"fi
0 0
原创粉丝点击