shell编程基础
1.cat /etc/shells #查看系统中安装的 shell
2.eg1.
#!/bin/bash
echo "Hello World !"
3.Shell 脚本的执行:
chmod +x ./hello.sh #使脚本具有执行权限
./hello.sh #执行脚本
/bin/sh /root/hello.sh #作为解释器参数运行,不需要在第一行指定解释器信息(shell种类),写了也不生效
简写为: sh /root/hello.sh
4.shell变量定义和引用:
your_name="itcast . cn" #变量名和等号之间不能有空格
echo $your_name
echo ${your_name}
变量名的命名须遵循如下规则:
l 首个字符必须为字母( a-z,
A-Z)
l 中间不能有空格,可以使用下划线( _)
l 不能使用标点符号
l 不能使用 bash 里的关键字(可用
help 命令查看保留关键字)
readonly variable_name 只读
unset variable_name 删除
5.变量类型:
局部变量、环境变量(set #查看当前环境变量)、shell变量(shell 程序设置的特殊变量)。
6.参数传递:
在执行 Shell 脚本时, 可以向脚本传递参数。
脚本内获取参数的格式为: $n。 n 代表一个数字, 1 为执行脚本的第一个参
数, 2 为执行脚本的第二个参数,以此类推……
$0 表示当前脚本名称。
eg. ./test.sh 1 2 3
注:特殊字符:
$# |
传递到脚本的参数个数 |
$* |
以一个单字符串显示所有向脚本传递的参数。 |
$$ |
脚本运行的当前进程 ID 号 |
$! |
后台运行的最后一个进程的 ID 号 |
$@ |
与$*相同,但是使用时加引号,并在引号中返回每个参数。 |
$? |
显示最后命令的退出状态。 0 表示没有错误,其他任何值表明有错误。 |
7.$*和$@区别
相同点: 都表示传递给脚本的所有参数。
不同点:
不被" "包含时, $*和$@都以$1 $2… $n 的形式组成参数列表。
被" "包含时,
"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式组成一个整串; "$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式组成一个参数列表。
8.Shell 运算符
支持包括:算术、关系、 布尔、字符串等运算符。 原生 bash 不支持简单的数学运算,但是可以通过其他命令来实现。
eg. echo `expr $a + $b`
echo `expr $b - $a`
echo `expr $a \* $b`
echo `expr $b / $a`
此外,还可以通过(())、 $[]进行算术运算。
count=1
((count++))
echo $count
a=$((1+2))
a=$[1+2]
9.流程控制:
(1)if判断:-eq, -nq, -gt, -lt, -ge, -le
(2)for循环:注:for(())后面的分号,可省略。
(3)while循环:
(4)case分支:
(5)函数:
所有函数在使用前必须定义,这意味着必须将函数放在脚本开始部分。
可以带 function fun()定义,也可以直接 fun() 定义,不带任何参数。
参数返回,可以显示加
return ,如果不加,将以最后一条命令运行结
果,作为返回值。 return 后跟数值 n(0-255)。
当 n>=10 时,需要使用${n}来获取参数。
示例见下图: