shell简介
- shell本身是一个用C语言编写的程序,即是一种命令语言,又是一种程序设计语言。
命令语言:交互式的解释并执行用户输入的命令。
程序设计语言:它有变量定义和流程控制以及函数。 - Unix/linux上几种常见的shell有bash、sh、ksh、csh。其中bash是linux下默认的shell,sh是Unix标准默认的shell。
注意:bash完全兼容sh, 即sh的脚本可以不加修改的在bash上运行
第一个shell脚本
用文本编辑器编辑如下代码,
#!/bin/bash
echo "Hello World!"
推荐命名为scriptName.sh(非必需),为scriptName.sh增加执行权限并运行,
chmod +x scriptName.sh
./scriptName.sh//终端输出Hello World!
注意:#!为特定的标记,告诉系统该脚本由什么解释器解释执行。
shell变量
- 变量定义
varName=value
例如:
url="www.baidu.com"
num=10
注意:变量定义的等号两边均不能有空格,变量名的命名要以字母或下划线开头,中间不能有空格,且不能和shell中的关键字相同。
- 变量使用
$varName
${varName}
例如:
DOG="dog"
echo "There is a $DOG"#输出There is a dog
echo "There are many $DOGs"#输出There are many
echo "There are many ${DOG}s"#输出There are many dogs
注意:第二条回显之所以没有输入dogs,是因为没有定义DOSs变量,默认为空,故在这种地方一定要加{},一般推荐加{}。
- 特殊变量
shell解释器定义了一些特殊变量,这些变量不用定义可直接使用,拥有特殊含义。
变量 | 含义 |
---|---|
$0 | 当前脚本文件名 |
$n | n为整数,表示传递给脚本或函数的第n个参数 |
$# | 传递给脚本或函数的参数的个数 |
$* | 传递给脚本或函数的所有参数 |
$@ | 传递给脚本或函数的所有参数,当参数以双引号引起来时和$*略有不同 |
$? | 上一条语句的执行返回结果,一般成功返回0,失败返回其他 |
$$ | 当前shell进程的进程ID |
$*和$@的区别:
shell运算符
shell支持很多运算符,包括算术运算符、关系运算符、布尔运算符、字符串运算符和文件运算符。但原生shell不支持算术运算,可以用命令来实现,例如expr。expr是表达式计算工具,用expr可以完成表达式求值。
例如:计算3+5
val=`expr 3 + 5`
注意:
expr 3 + 5 作为一个完整的表达式要被` `引起来,注意这不是单引号,是数字键1左边的那个建上的符号。
数字与运算符之间要有空格, 3+5这样写是不对的。
下面列表说明:
运算符 | 说明 | 举例 |
---|---|---|
+ | 加法 | expr $a + $b |
- | 减法 | expr 7 - 5 |
* | 乘法 | expr 9 \* 3 |
\ | 整除 | expr 8 \ 2 |
% | 取模 | expr 7 % 3 |
= | 赋值 | a=$b |