文档声明:
以下资料均属于本人在学习过程中产出的学习笔记,如果错误或者遗漏之处,请多多指正。并且该文档在后期会随着学习的深入不断补充完善。感谢各位的参考查看。
笔记资料仅供学习交流使用,转载请标明出处,谢谢配合。
作者:Aliven888
shell脚本编程严格的来说就是 BASH 编程。我们在进行shell脚本编程时不需要变以及,也不需要什么集成开发环境(linux系统中),通常所使用的都是文本编辑器(VIM 或者 Emacs等)。
告诉 shell运行当前脚本该使用那个 shell 程序。
格式:
#! /bin/bash : 指定脚本运行环境为 /bin/bash
在编程中,必要的注释,有利于提高我们编程的可读性,而 shell编程也不例外。
格式:
# + 注释描述文本
eg:
# this is a comment
shell程序虽然并不经常和用户进行大量的交互,但是有些时候必要的输入还是必须的。这里简单介绍下输入和输出的常用指令—— read 和 echo 。
在linux中使用shell进行脚本编程时,输入参数使用read指令。
格式:
read + 变量名(变量可以有多个,使用空格隔开)
注意事项:
演示实例:
#! /bin/bash
read num1 num2
echo "current input value is $num1 - $num2"
我们在进行编程开发的目的就是输出打印结果值,echo 命令把其参数传递给标准输出(显示器);echo指令打印输出参数后会自动换行,因此不必再添加换行符。如果是输出某个变量,需要使用 “$”符号配合。
格式:
echo “hello word” //输出字符串。
#! /bin/bash
# this is a comment
echo "hello world"
结果输出:
变量 和 运算符 时所有编程语言都必须所具备的元素。
shell编程中定义一个变量不需要使用数据类型来进行声明,直接使用 “=” 赋予初始值就可以使用了。
格式:
value = “shell is very good”
#! /bin/bash
# this is a comment
echo "hello world"
value="shell is very good"
echo $value
iValue=100
echo $iValue
注意事项:
因为"$"是输出提示符,所以当我们想输出该符号时,可以考虑使用转义字符 ‘/’ 来实现。
同时,shell也提供了 “{}” 来限定一个变量的开始与结束;在紧跟变量输出字母后缀时可以使用该功能。
演示实例:
#! /bin/bash
# this is a comment
value=100
echo "current \$value is $value"
good="1234"
echo "num is ${good}56789"
有时我们启动shell脚本时需要传入参数,这时我们就可以使用位置变量来实现。在shell编程中系统为我们提供了[$0 - $n];其中$0比较特殊,里面存放的是当前脚本的名称;而在需要传递的参数超过10的时候,需要使用 “{}” (例如: ${11}, ${12} …)。
演示实例:
#! /bin/bash
echo "\$0 = $0"
echo "\$1 = $1"
echo "\$2 = $2"
echo "\$3 = $3"
echo "\$4 = $4"
格式:
演示实例:
#! /bin/bash
value="good"
# 双引号会对 $ 进行解释
echo "today is $value"
# 单引号不会对 $ 进行解释
echo 'today is $value'
# 倒引号 会对其中的 shell 命令进行解释
echo "current path is `pwd`"
shell脚本中的运算符合其他语言的差不多,接下来以表格的形式进行介绍。
运算符 | 含义 |
---|---|
+, - | 单目正,单目富 |
!, ~ | 逻辑非,按位取反 |
*, /, % | 乘,除,取余 |
+,- | 加, 减 |
<< , >> | 按位左移, 按位右移 |
<=, >=, <, > | 小于等于,大于等于,小于,大于 |
==, != | 等于, 不等于 |
& | 按位与 |
^ | 按位异或 |
| | 按位或 |
&& | 逻辑与 |
|| | 逻辑或 |
=, +=, -+, *=, /=, %=, &=, |=, <<=, >>= | 赋值,运算并赋值 |
注意事项:
在shell编程中,表达式求值一般使用 “$[]” 实现;如果想实现按照某种进制参数运算,可以在中括号中添加 base#n(表示n是按照base进制显示的,例如 $[16#20] 表示20是按照16进制显示的。)。
其中expr的功能增加的强大,这个命令可以使用在更加复杂的算式中,使用起来也更加的灵活;该命令在计算表达式后,会直接把结果输出。
如果我们仅仅是用来计算整数类型的算式,还可以使用let指令。
格式:
$[num1 + num2] 或者 $[10#20 + num2]
expr 1 + 2 : 计算并输出 1 + 2 的值。
let sum = num1+num2
演示实例:
#! /bin/bash
num1=10
num2=22
echo $[$num1+ $num2]
echo $[16#10 + $num2]
echo $[8#10 + $num2]
expr 1 + 2
sum=0
let sum=$num1+$num2
echo "sum = $sum"
注意事项:
if命令用于判断条件是否成立,进而决定是否执行相关语句。该语法在编程中可以说是使用频率比较高的一个了。
格式:
# 用法1
if [ 条件 ]
then
执行体1
else
执行体2
fi
# 用法2
if [ 条件1 ]
then
执行体1
elif [ 条件2 ]
then
执行体2
elif [ 条件3 ]
then
执行体3
else
执行体4
fi
注意事项:
演示实例:
################### 用例1###################
#! /bin/bash
if [ "1" = $1 ]
then
echo "current value is 1"
else
echo "current value is not 1"
fi
################### 用例2 ###################
#! /bin/bash
if [ "1" = $1 ]
then
echo "current value is 1"
elif [ "2" = $1 ]
then
echo "current value is 2"
elif [ "3" = $1 ]
then
echo "current value is 4"
else
echo "current value is unknow."
fi
shell中还有另外一种控制结构,那就是case,用于在一系列的模式中匹配某个变量的值。
格式:
case word in
类型1)
执行体1
;; #结束符,类似于C语言中的 break
类型2)
执行体2
;;
类型3)
执行体4
;;
...
*) # 匹配全部,类似于c语言中的 default
执行体5
;;
esac # case 单词反写
演示实例:
#! /bin/bash
case "$1" in
"1")
echo "current input value is 1"
;;
"2")
echo "current input value is 2"
;;
"3")
echo "current input value is 3"
;;
*)
echo "current input others value..."
;;
esac
注意事项:
循环结构用于反复执行某一段语句,这也是程序设计中比较中要的一个语法之一。在 shell中常用的循环结构有 while、 until、 for三种。
while语句重复执行指令;遇到条件为真(值为0),则执行循环体;而如果遇到条件为假(值非0),退出循环。
格式:
while 执行条件
do
循环体
done
演示实例:
#! /bin/bash
sum=0
number=1
while test $number -le 100
do
sum=$[ $sum + $number ]
let number=$number+1
done
echo "1+2+3+4+...+100 = $sum";
注意事项:
until是while的另一种写法,但是执行条件与while相反。until是遇到条件为假(值非0),则执行循环体(即执行循环体直到条件为真【值为0】)。
格式:
until 执行条件
do
循环体
done
演示实例:
#! /bin/bash
sum=0
number=1
until ! test $number -le 100
do
sum=$[ $sum + $number ]
let number=$number+1
done
echo "1+2+3+4+...+100 = $sum";
注意事项:
与前两中循环相比较,for的优点在于可以从集合中逐一遍历集合的值。
格式:
for value [ in list ]
do
循环体
done
演示实例:
#! /bin/bash
for i in 1 2 3 4 5 6 7 8
do
echo "print --- $i"
done
结果输出:
exit 用于强制退出一个脚本,并且向调用这个脚本的进程返回一个整数值。
格式:
exit num
注意事项:
演示实例:
#! /bin/bash
read num1 num2
echo "current input value is $num1 - $num2"
exit 0