1.第一个shell脚本
使用vi/vim命令,新建文件.sh(sh 代表shell)文件,编写如下内容.
#!/bin/bash
echo "hello world!"
#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行 .#!/bin/bash
就是让/bin/bash命令来执行这个shell脚本。注意中间不能有空格。
echo
命令用于向窗口输出文本.
注意要修改这个文件的权限,让其具有执行权限.不然无法执行.
2.shell变量
- 变量命名规则:
- 只能英文,数字,下划线.首字母不能以数字开头.
- 中间不能有空格
- 不能使用bash关键字.
- 定义变量
username="runoob.com"
- 使用变量,在变量名前加美元符号
$
即可
echo $username
或者:
echo ${username} {}是可选的,加花括号是为了帮助解释器识别变量的边界
- 只读变量
使用readonly将变量定义为只读变量,只读变量不能改变.
readonly url
url="www.baidu.com"
- 删除变量,变量被删除后不能被再次使用.
unset username
运行shell时,会同时存在三种变量:
- 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
- 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
- shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行
3.shell字符串
shell字符串可以用单引号,双引号,也可以不用引号.
3.1单引号
username='young'
str="my name is $username"
echo $str
输出结果:
- 单引号里的任何字符都会被原封不动的输出,单引号中的变量是无效的.
- 单引号字符串中不能出现一个单独的单引号(对单引号使用转义字符也不行).但可以成对出现,作为字符串拼接使用.
3.2双引号
your_name='young'
str="hello,$your_name"
echo $str
输出结果:
- 双引号里可以有变量
- 双引号里可以有转义字符.
拼接字符串:
yourname='young'
str="hello "${yourname}" !"
str2="hello "$yourname" !"
str3="hello $yourname !"
echo $str
echo $str2
echo $str3
str4='hello "${yourname}" !'
str5='hello '$yourname' !'
str6="hello '$yourname' !"
echo $str4
echo $str5
echo $str6
输出结果:
3.3shell数组
bash支持以为数组,并且没有限定数组的大小.数组元素的下标从0开始.获取数组中的元素要利用下标.下标可以是整数或者表达式,其值应该大于或者等于0;
- 定义数组:
在shell中,用括号来表示数组,数组元素用"空格"符号来分割. - 读取数组:
读取数组的一般格式:${数组名[下标]}
arrayname=(hello world my love)
echo ${arrayname[0]}
echo ${arrayname[@]}
echo ${#arrayname}
@
符号可以获取数组中的所有元素.
#
符号可以获取数组的长度
输出结果:
3.4shell注释
以#
符号开头的行就是注释,会被解释器忽略.可以通过每一行加一个#
符号设置多行注释.
每一行注释态麻烦,可以使用:
:<<eof
注释
eof
这种形式来框住注释块.
#!/bin/bash
arrayname=(hello world my love)
echo ${arrayname[0]}
echo ${arrayname[@]}
echo ${#arrayname}
#这是注释1
#这是注释2
:<<eof
这是被注释的地方1
这是被注释的第二行
eof
输出结果:
还可以使用:<<! 注释块 !
或者 :<<' 注释块 '
来进行注释
4.shell基本运算符
4.1算术运算符
原生的bash不支持简单的数学运算,但是可以通过其他命令来实现,如awk
,expr
.常用的是expr
.
expr是一款表达式计算工具,使用它能完成表达的求值运算.
- 注意,表达式和运算符之间要有空格,如写成2+2是不对的,要写成2 + 2;
- 完整的表达式要被``包含,注意这个字符是esc键下面的字符.
- 注意,条件表达式要放在[]之间,并且要有空格.如
[$a == $b]
是错误的,
示例:
#!/bin/bash
a=10
b=20
echo "a原来的值是:$a b原来的值是:$b"
val=`expr $a + $b`
echo " a+b 的值为: $val"
val=`expr $a+$b`
echo " a+b 的值为: $val"
val=`expr $a - $b`
echo "a-b 的值为: $val"
val=`expr $a \* $b`
echo "a*b 的值为: $val"
val=`expr $a / $b`
echo "a/b 的值为: $val"
val=`expr $a % $b`
echo "a%b 的值为: $val"
if [ $a == $b ]
then
echo "a等于b"
fi
if [ $a != $b ]
then
echo "a不等于b"
fi
a==b
if [ $a==$b ]
then
echo "a等于b"
fi
if [ $a!=$b ]
then
echo "a不等于b"
fi
输出结果:
4.2关系运算符
关系运算符只支持数字,不支持字符串,除非字符串的值数字
#!/bin/bash
a=10
b=20
echo $a
echo $b
if [ $a -eq $b ]
then
echo "$a == $b : true"
else
echo "$a == $b: false"
fi
if [ $a -ne $b ]
then
echo "$a != $b true"
else
echo "$a != $b false"
fi
if [ $a -lt $b ]
then
echo "$a < $b true"
else
echo "$a < $b false"
fi
if [ $a -gt $b ]
then
echo "$a > $b true"
else
echo "$a > $b false"
fi
if [ $a -ge $b ]
then
echo "$a >= $b true"
else
echo "$a >= $b false"
fi
if [ $a -le $b ]
then
echo "$a <= $b true"
else
echo "$a <= $b false"
fi
输出结果:
4.3布尔运算符
#!/bin/bash
a=10
b=20
if [ $a -gt 10 -a $b -gt 10 ]
then
echo "false"
else
echo "true"
fi
if [ $a -gt 10 -o $b -gt 10 ]
then
echo "true"
else
echo "false"
fi
if [ $a != $b ]
then
echo "false"
else
echo "true"
fi
输出结果:
4.4逻辑运算符
#!/bin/bash
a=10
b=20
if [[ $a -lt 20 && $b -gt 12 ]]
then
echo "true"
else
echo "false"
fi
if [[ $a -gt 20 || $b -gt 12 ]]
then
echo "true"
else
echo "false"
fi
输出结果:
- 注意if 后面的
[[
两个中括号要连在一起。
4.5字符串运算符
#!/bin/bash
a="abc"
b="qwe"
if [ $a = $b ]
then
echo "字符串a和字符串b 相等"
else
echo "字符串a和字符串b不相等"
fi
if [ -z $a ]
then
echo "字符串a的长度为0"
else
echo "字符串a的长度不为0"
fi
输出结果:
4.6文件测试运算符
命令太多,懒得写了。