shell脚本基本语法
我们都知道,在编写shell脚本的时候第一行必然是#!/bin/bash因为linux中不只有bash一个解析器,不同解析器中的语法不相同,这个是通知系统使用bash解析器
一、shell脚本中的变量
shell中一样可以对变量进行赋值、运算但是需要注意几个点:
1、shell脚本相比C语言有一个优势是变量不需要定义,在使用的时候直接a=1,第一次使用就默认会定义。
2、shell中的变量只有两种类型,整型和字符串。
3、shell中使用变量不能加空格,否则会被识别成命令。
shell脚本中给变量赋值直接写即可,也不需要分号,例
a=2
b=3
c=“this is a test”
但是当使用或者输出的时候则需要前面加一个$符号,另外做加减乘除运算的时候还需要再加两层小括号,还有一些调用是需要花括号的,例
d=$((a+b))
e=$((a-b))
f=$((a*b))
g=$((a/b)) #取整
h=$((a%b)) #取余
i=$((a**3))#a的三次方
echo $c
echo "a = "$a #输出a的值
echo "b = "$b #输出b的值
echo "a+b = "${d} #输出a+b的值
echo "a-b = "${e} #输出a-b的值
echo "a**b = "${f} #输出a*b的值
echo "a/b = "${g} #输出a/b的值
echo "a%b = "${h} #输出a%b的值
echo "a^3 = "${i} #输出a的3次方的值
echo "a+b = "$((a+b)) #输出a+b的值
echo "a-b = "$((a-b)) #输出a-b的值
echo "a*b = "$((a*b)) #输出a*b的值
echo "a/b = "$((a/b)) #输出a/b的值
echo "a%b = "$((a%b)) #输出a%b的值
echo "a^3 = "$((a**3)) #输出a的3次方的值
echo $((a+b*a-b/a+a%b+a**2)) #表达式可以很长
有一个小的要注意的点,就是在shell中一行后面加注释的话井号前面要加空格。
把上面的内容写到脚本中看一下运行结果:
在ubuntu上运行脚本,使用sh命令:
forlinx@forlinx:~$ sh shell_test.sh
shell_test.sh: 18: shell_test.sh: arithmetic expression: expecting primary: "a**3"
会有一个a**3报错,这不不是语法问题,由于 是 bash
函数,在 dash
里还没声明,Debian
和Ubuntu
默认用dash
作为/bin/sh
的解释器,所以报错。那么我们换bash命令来执行:
forlinx@forlinx:~$ bash shell_test.sh
hello world !
a = 2
b = 3
a+b = 5
a-b = -1
a**b = 6
a/b = 0
a%b = 2
a^3 = 8
a+b = 5
a-b = -1
a*b = 6
a/b = 0
a%b = 2
a^3 = 8
13
可以看到执行结果没有问题,脚本的执行还有一种方式就是./这个是我们常用的,但是这种就需要你的脚本有可执行权限,用sh命令或者bash命令就不需要。
forlinx@forlinx:~$ ./shell_test.sh
bash: ./shell_test.sh: Permission denied
另外提一点,如果你的字符串是一整个,比如hello_world!,复制的时候可不加引号,当然加了也不会有问题。