Shell与Bash
shell是运行在终端中的文本互动程序,bash(GNU Bourne-Again Shell)是最常用的一种shell。是当前大多数Linux发行版的默认Shell。
Shell相当于是一个翻译,把我们在计算机上的操作或我们的命令,翻译为计算机可识别的二进制命令,传递给内核,以便调用计算机硬件执行相关的操作;同时,计算机执行完命令后,再通过Shell翻译成自然语言,呈现在我们面前。
其他的shell还有:sh、bash、ksh、rsh、csh等。Ubuntu系统常用的是bash,Bio-linux系统是基于ubuntu定制的,但是却使用了zsh
sh的全名是Bourne Shell。名字中的玻恩就是这个Shell的作者
而bash的全名是Bourne Again Shell。最开始在Unix系统中流行的是sh,而bash作为sh的改进版本,提供了更加丰富的功能。一般来说,都推荐使用bash作为默认的Shell。
可以用如下命令查看本机shell
echo $SHELL
例程1 展示命令的参数
文件名positionPara.sh
#!/bin/bash
# 输出各个参数
echo $0 $1 $2
echo $*
echo $@
echo 参数个数=$#
说明
- #!表示指定解释器
- 文件名中
.sh
不是必须的 - 运行文件可以直接用
sh positionPara.sh
执行,也可以下面的指令运行
运行
chmod +x positionPara.sh
./positionPara.sh 10 20
结果
/positionPara.sh 10 20
10 20
10 20
参数个数=2
解释:
- $n :$0 代表命令本身、$1-$9 代表第1到9个参数,10以上参数用花括号,如 ${10}。
- $* :命令行中所有参数,且把所有参数看成一个整体。
- $@ :命令行中所有参数,且把每个参数区分对待。
- $# :所有参数个数。
- chmod +x 表示为该文件增加
可执行
权限
例程2 运算表达式
- $((运算式)) 或 $[运算式]
- expr m + n 注意 expr 运算符间要有空格
- expr m - n
- expr
\*
,/,% 分别代表乘,除,取余 - 注意expr表达式的
运算符与数字之间必须有空格
Shell 变量
定义
Shell 变量分为系统变量和自定义变量。系统变量有 H O M E 、 HOME、 HOME、PWD、$USER等,显示当前 Shell 中所有变量:set 。
变量名可以由字母、数字、下划线组成,不能以数字开头。
基本语法
定义变量:变量名=变量值,等号两侧不能有空格,变量名一般习惯用大写。
删除变量:unset 变量名 。
声明静态变量:readonly 变量名,静态变量不能unset。
# 使用变量:$变量
echo $(((2+3)*4))
# 第2种方式 $[],推荐
echo $[(2+3)*4]
# 使用 expr
TEMP=`expr 2 + 3`
echo `expr $TEMP \* 4`
例程3 [ condition ] 语句
[ condition ] 注意condition前后要有空格。非空返回0,0为 true,否则为 false 。
if [ 'test01' = 'test' ]
then
echo '等于'
fi
# 20是否大于10
if [ 20 -gt 10]
then
echo '大于'
fi
# 是否存在文件/root/shell/a.txt
if [ -e /root/shell/a.txt ]
then
echo '存在'
fi
if [ 'test02' = 'test02' ] && echo 'hello' || echo 'world'
then
echo '条件满足,执行后面的语句'
fi
其中fi
其实就是if
反过来写23333
结果
大于
hello
条件满足,执行后面的语句
例程4 for循环
语法
# 语法1
for 变量名 in 值1 值2 值3...
do
程序
done
# 语法2
for ((初始值;循环控制条件;变量变化))
do
程序
done
实例1 : 打印命令行参数
#!/bin/bash
# 使用$*
for i in "$*"
do
echo "the arg is $i"
done
echo "=================="
# 使用$@
for j in "$@"
do
echo "the arg is $j"
done
输出
the arg is 1 2 3
==================
the arg is 1
the arg is 2
the arg is 3
从此例中也可以看出$*
与$@
的区别
实例2 : 输出从1到100的和
#!/bin/bash
SUM=0
for ((i=1;i<=100;i++))
do
SUM=$[$SUM+$i]
done
echo $SUM