基本格式
hello.sh
#!/bin/bash
echo "Hello World !"
显示行号
#在非编辑模式下
:set nu
#按 i 进入编辑模式
执行方式
#第一种
sh hello.sh
#第二种
#修改了文件的执行权限
chmod u+x hello.sh
./hello.sh
#第三种
#修改了文件的全部权限
chmod 777 hello.sh
./hello.sh
shell变量使用
语法格式: 变量=值,如: your_name="itcast.cn"
注意: 变量名和等号之间不能有空格,同时,变量名的命名须遵循如下规则:
- 首个字符必须为字母( a-z, A-Z)
- 中间不能有空格,可以使用下划线( _)
- 不能使用标点符号
- 不能使用 bash里的关键字(可用 help 命令查看保留关键字)
用法:
#声明变量
your_name="snail"
#使用变量
echo $your_name
#拼接字符串
echo ${your_name} com
date #当前时间
sleep 0.5 #休眠0.5秒
> 写入到文件覆盖
>> 写入到文件追加
修饰符
readonly 可以将变量定义为只读变量,类似final
unset 命令可以删除变量。 不能删除只读变量。
expr 是一款表达式计算工具
let 命令是 BASH 中用于计算的工具
read 修饰输入内容
变量类型
局部变量
局部变量在脚本或命令中定义,仅在当前 shell 实例中有效,其他 shell 启动的程序不能访问局部变量。
环境变量
所有的程序,包括 shell 启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。 可以用过 set 命令查看当前环境变量。
#查看当前系统的环境变量
set
#全局变量文件
/etc/profile
shell变量
shell 变量是由 shell 程序设置的特殊变量。 shell 变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了 shell 的正常运行
#在脚本中使用的变量
参数传递
#向shell脚本里传参
sh hello.sh abc aaa 123
#接收参数
$0 是脚本本身文件名
$1 接收第一个参数
$2 接收第二个参数
$3 接收第三个参数
...
特殊字符
| $# | 传递到脚本的参数个数 |
|---|---|
| $* | 以一个单字符串显示所有向脚本传递的参数。 |
| $$ | 脚本运行的当前进程 ID 号 |
| $! | 后台运行的最后一个进程的 ID 号 |
| $@ | 与$*相同,但是使用时加引号,并在引号中返回每个参数。 |
| $? | 显示最后命令的退出状态。 0 表示没有错误,其他任何值表明有错误。 |
例子:
#!/bin/bash
echo "第一个参数为: $1";
echo "参数个数为: $#";
echo "传递的参数作为一个字符串显示: $*";
#执行脚本: ./test.sh 1 2 3
shell运算符
Shell 和其他编程语音一样,支持包括:算术、关系、布尔、字符串等运算符。 原生 bash 不支持简单的数学运算,但是可以通过其他命令来实现,例如
expr 是一款表达式计算工具,使用它能完成表达式的求值操作。例如加,减,乘,除等操作
注意:表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2。完整的表达式要被 ``包含,注意不是单引号,在 Esc 键下边。
#!/bin/bash
name="hello word !"
echo $name
echo ${name} snail
a=10
b=24
#加法运算
echo 'a+b =' `expr $a + $b`
#减法运算
echo 'a-b =' `expr $a - $b`
#乘法运算
echo 'a*b =' `expr $a \* $b`
#除法运算
echo 'b/a =' `expr $b / $a`
#余数运算
echo `expr $b % $a`
count=1
((count++))
echo $count
c=$((1+2))
d=$[1+2]
echo $c $d
流程控制
条件表达式写法
eq 就是 EQUAL 等于 =
nq 就是 NOT EQUAL 不等于 !=
gt 就是 GREATER THAN 大于 >
lt 就是 LESS THAN 小于 <
ge 就是 GREATER THAN OR EQUAL 大于等于 >=
le 就是 LESS THAN OR EQUAL 小于等于 <=
if else 语句
a=10
b=20
#1.判断a等不等于b
if [ $a -gt $b ]
then
echo "a>b"
elif [ $a -eq $b ]
then
echo "a=b"
else
echo "a<b"
fi
for循环
#方式一
for item in a b c
do
echo ${item}
done
#方式二
for(( i=0;i<=5;i++ ))
do
echo $i
done
while语法
i=1
while(( i <= 3 ))
do
let i++
echo $i
done
case语句
echo "输入数字"
read aNum
case $aNum in
1)
echo "1"
;;
2)
echo "2"
;;
3)
echo "3"
;;
*)
echo "没有"
;;
esac
函数
函数使用
语法:name(){...}
hello(){
echo "hello word"
echo $1
echo $2
}
#运行函数时传参
hello aaa bbb
#接收执行脚本的时候传参
hello $1 $2