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

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/bash
echo "hello world"

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


shell 变量:

定义变量

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

age="18"

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

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

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

使用变量

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

#!/bin/bash
echo "what is your name?"
NAME=tommy
echo "my name is ${NAME}"

这里写图片描述

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

重新定义变量

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

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

这里写图片描述

只读变量

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

例:

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

这里写图片描述

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

删除变量

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

#!/bin/bash
name="bob"
unset name
echo "name is ${name}"

这里写图片描述

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

变量类型

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

特殊变量列表

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

命令行参数

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

用法

#!/bin/bash

echo "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/bash

echo ${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 var
echo ${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 脚本的学习与使用(一)_第2张图片


shell 运算符

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

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

这里写图片描述

注意:

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

算数运算符

#!/bin/sh
a=10
b=20
val=`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"
fi
if [ $a != $b ]
then
   echo "a is not equal to b"
fi

你可能感兴趣的:(other)