Shell为弱类型语言,在使用变量时不指定类型。
Shell脚本语言不需要编译就可以直接执行,但脚本文件默认没有执行权限,需要chmod添加执行权限:
chmod +x test.sh
如果希望这个脚本文件只能由文件所有者执行(所属用户组和其他用户不可执行),那么可以将上面的命令改为:
chmod u+x test.sh
脚本文件开头第一行指定bin文件夹下的bash解释器,关于脚本第一行的探索可以看这里:点击打开链接
#!/bin/bash
echo "hello world"
下面列出shell脚本中一些常见的符号:
$ 变量引用符
$# 表示命令行参数个数
$* 表示所有参数
$n 表示第n个参数(参数从1开始计数)
$? 表示最后一个命令执行之后的返回值
| 连接前后两个命令,将前面的命令返回值传给后面的命令,支持多命令连接
< 表示重定向输入
> 表示重定向输出
" " 表示字符串,双引号内可以引用变量或命令,要使用元字符需要加转义符\
` ` 表示命令,单引号在键盘esc正下方
‘ ’ 表示字符串,单引号内不可以引用变量或命令,一律视为普通字符。在单引号内,元义字符可以直接使用,如果要去掉元义需加转义符\
echo "today is `date`" #date为系统命令
today is Sun Mar 5 10:18:51 HKT 2017
shell脚本中单行注释使用#,多行注释可以使用 :<<字符(开头) .... 字符(结尾)
#这是单行注释
-------------------------
:<<!
这是多行注释
用的字符随意
但前后要一致
!
-------------------------
shell脚本也有跟C语言类似的语法,例如循环与分支的控制。下面给出一些简单示例,以便更直观地了解shell脚本语言与C语言的异同。
循环控制:
#while循环(当变量VAR为1时打印hello world)
while[$VAR=1] #条件用[]括起来
do
echo "hello world" #循环体用do跟done围起来
done
#for循环(打印从1到10)
for i in $(seq 1 10)
do
echo $i
done
分支控制:
#if-else
if[$VAR=1]
then #在if后要加then
echo "hello"
elif
then #在elif后要加then
echo "world"
else #else后不需要加then
echo "!"
fi #用fi表示if语句结束
#case(类似于switch)
case $VAR in
1)echo "hello";; #每个case单独分支用双分号结束
2)echo "world";;
esac #用esac表示case语句结束