本文主要介绍 Linux Shell 编程的基础知识,包含下面 5个方面:
1.Shell 编程概述
2.Shell 关键字
3.Shell 变量
4.Shell 运算
5.Shell 语句
一,Shell 编程概述
在 Linux 下有一门脚本语言叫做:Shell 脚本,这个脚本语言可以帮助我们简化很多工作,例如编写自定义命令等,所以还是很有必要学习它的基本用法的,一个简单的 hello.sh 脚本像下面这样,第一行 #!/bin/bash 标识该 Shell 脚本由哪个 Shell 解释:
#!/bin/bash
echo "Hello World!"
赋予权限才可以执行:
#赋予可执行权限
chmod a+x hello.sh
# 执行
./hello.sh
# 结果
Hello World!
二,Shell 关键字
常用的关键字如下:
看个例子:
#!/bin/bash
echo "Hello Shell"
# 读入变量
read VAR
echo "VAR is $VAR"
# 计算变量
expr $VAR - 5
# 测试字符串
test "Hello"="HelloWorld"
# 测试整数
test $VAR -eq 10
# 测试目录
test -d ./Android
# 执行其他 Shell 脚本
exec ./othershell.sh
# 退出
exit
运行前,你需要新建一个 othershell.sh 的文件,让它输出 I’m othershell,并且中途需要一次输入,我这里输入的是 10:
Hello Shell
10
VAR is 10
5
I'm othershell
三,Shell 变量
Shell 变量分为 3 种:
定义变量需要注意下面 2 点:
使用 $VAR 调用变量:
echo $VAR
1. 用户自定义变量
这种变量只支持字符串类型,不支持其他字符,浮点等类型,常见有这 3 个前缀:
一个例子:
#!/bin/bash
# 定义普通变量
CITY=SHENZHEN
# 定义全局变量
export NAME=cdeveloper
# 定义只读变量
readonly AGE=21
# 打印变量的值
echo $CITY
echo $NAME
echo $AGE
# 删除 CITY 变量
unset CITY
# 不会输出 SHENZHEN
echo $CITY
运行结果:
SHENZHEN
cdeveloper
21
2. 预定义变量
预定义变量常用来获取命令行的输入,有下面这些:
$0 :脚本文件名
$1-9 :第 1-9 个命令行参数名
$# :命令行参数个数
$@ :所有命令行参数
$* :所有命令行参数
$? :前一个命令的退出状态,可用于获取函数返回值
$$ :执行的进程 ID
一个例子:
#!/bin/bash
echo "print $"
echo "\$0 = $0"
echo "\$1 = $1"
echo "\$2 = $2"
echo "\$# = $#"
echo "\$@ = $@"
echo "\$* = $*"
echo "\$$ = $$"
echo "\$? = $?"
执行./hello.sh 1 2 3 4 5
的结果:
print $
# 程序名
$0 = ./hello.sh
# 第一个参数
$1 = 1
# 第二个参数
$2 = 2
# 一共有 5 个参数
$# = 5
# 打印出所有参数
$@ = 1 2 3 4 5
# 打印出所有参数
$* = 1 2 3 4 5
# 进程 ID
$$ = 9450
# 之前没有执行其他命令或者函数
$? = 0
3. 环境变量
环境变量默认就存在,常用的有下面这几个:
还是看例子:
#!/bin/bash
echo "print env"
echo $HOME
echo $PATH
echo $TERM
echo $PWD
echo $UID
运行结果:
print env
# 当前主目录
/home/orange
# PATH 环境变量
/home/orange/anaconda2/bin:后面还有很多
# 当前终端
xterm-256color
# 当前目录
/home/orange
# 用户 ID
1000
四,shell运算
我们经常需要在 Shell 脚本中计算,掌握基本的运算方法很有必要,下面就是 4 种比较常见的运算方法,功能都是将 m + 1:
来看一个实际的例子:
#!/bin/bash
m=1
m=$[ m + 1 ]
echo $m
m=`expr $m + 1`
echo $m
# 注意:+ 号左右不要加空格
let m=m+1
echo $m
m=$(( m + 1 ))
echo $m
运行结果:
2
3
4
5
五,Shell 语句
Shell 语句跟高级语言有些类似,也包括分支,跳转,循环,下面就带着大家一个一个突破。
1. if 语句
这个跟高级语言的 if - else - if
类似,只是格式有些不同而已,也来看个例子吧:
#!/bin/bash
read VAR
# 下面这两种判断方法都可以,使用 [] 注意左右加空格
#if test $VAR -eq 10
if [ $VART -eq 10 ]
then
echo "true"
else
echo "false"
fi
2. case 语句
case 语句有些复杂,要注意格式:
#!/bin/bash
read NAME
# 格式有点复杂,一定要注意
case $NAME in
"Linux")
echo "Linux"
;;
"cdeveloper")
echo "cdeveloper"
;;
*)
echo "other"
;;
esac
运行结果:
# 输入 Linux
Linux
Linux
# 输入 cdeveloper
cdeveloper
cdeveloper
# 输入其他的字符串
hello
other
3. for 循环
这是一个 for 循环基本使用例子,挺简单的,有点类似 Python:
#!/bin/bash
# 普通 for 循环
for ((i = 1; i <= 3; i++))
do
echo $i
done
# VAR 依次代表每个元素
for VAR in 1 2 3
do
echo $VAR
done
运行结果:
1
2
3
4. while 循环
注意与 for 循环的区别:
#!/bin/bash
VAR=1
# 如果 VAR 小于 10,就打印出来
while [ $VAR -lt 10 ]
do
echo $VAR
# VAR 自增 1
VAR=$[ $VAR + 1 ]
done
运行结果:
1
2
3
4
5
6
7
8
9
5. until 循环
until 语句与上面的循环的不同点是它的结束条件为 1:
#!/bin/bash
i=0
# i 大于 5 时,循环结束
until [[ "$i" -gt 5 ]]
do
echo $i
i=$[ $i + 1 ]
done
6. break
Shell 中的 break 用法与高级语言相同,都是跳出循环,来看个例子:
#!/bin/bash
for VAR in 1 2 3
do
# 如何 VAR 等于 2 就跳出循环
if [ $VAR -eq 2 ]
then
break
fi
echo $VAR
done
运行结果:
1
7. continue
continue 用来跳过本次循环,进入下一次循环,再来看看上面的例子:
#!/bin/bash
for VAR in 1 2 3
do
# 如果 VAR 等于 2,就跳过,直接进入下一次 VAR = 3 的循环
if [ $VAR -eq 2 ]
then
continue
fi
echo $VAR
done
运行结果:
1
3
感谢共同分享,有删减。