语法:
1. echo "Hello World !" //echo 命令用于向窗口输出文本
2.your_name="runoob.com" //变量名定义,变量名和等号之间不能有空格
命名规则:
命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
中间不能有空格,可以使用下划线(_)。
不能使用标点符号。
不能使用bash里的关键字(可用help命令查看保留关键字)
3.使用变量 加$ ,加花括号是为了帮助解释器识别变量的边界
echo ${your_name}
4.只读变量 readonly
readonly myUrl
5.删除变量 unset ,不能删除只读变量
unset your_name
6.变量类型
1) 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
2) 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
3) shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行
二 字符串
1.单引号 双引号区别
双引号内可以引用变量
双引号内可以出现转义字符
2.获取字符串长度
string="abcd"
echo ${#string}
3.提取子字符串
string="runoob is a great site"
echo ${string:1:4} //输出 unoo
4.查找子字符串
查找字符i或o 位置,谁先出现就计算哪个
string="runoob is a great site"
echo `expr index "$string" io` //`是反引号
三 数组
只支持一位数组
1.array=(value1 value2 value3)
或
array=(
value1
value2
value3
)
2.数组读取
value1=${array[1]}
使用 @ 符号可以获取数组中的所有元素
3.获取数组的长度
length=${#array[@]} 或者 length=${#array[*]}
lengthn=${#array[n]} //获取下标位n元素长度
四、shell 注释
1.#开头 行注释
2. 多行注释
:<<EOF
注释内容
注释内容
注释内容
EOF
五、shell传递参数
向脚本传递参数,脚本内获取参数的格式为:$n
$# :传递到脚本的参数个数
$* :以一个单字符串显示所有向脚本传递的参数
$@ :与$*相同,但是使用时加引号,并在引号中返回每个参数。
六、Shell基本运算符
.expr 表达式
val=`expr 2 + 2`
echo "两数之和为 : $val"
注意:
表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2,这与我们熟悉的大多数编程语言不一样。
完整的表达式要被 ` ` 包含,注意这个字符不是常用的单引号,在 Esc 键下边
1.算数运算符
+ `expr $a + $b`
-
* `expr $a * $b`
/ `expr $b / $a`
% `expr $b % $a`
=
== [ $a == $b ] 返回true,false
!= [ $a != $b ]
条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]。
2.关系运算符
-eq :[ $a -eq $b ] 返回true或者false
-ne
-gt 检测左边数大于右边
-lt
-ge 检测左边数大于等于右边
-le
3.布尔运算符
! 非 [ !false ]
-o 或 [ $a -lt 20 -o $b -gt 100 ]
-a 与 [ $a -lt 20 -a $b -gt 100 ]
4.逻辑运算符
$$ 逻辑的 AND [[ $a -lt 100 && $b -gt 100 ]]
|| 逻辑的 OR [[ $a -lt 100 || $b -gt 100 ]]
5.字符串运算符
= [ $a = $b ]
!=
-z [ -z $a ] //检测字符串长度是否为0,为0返回 true
-n [ -n "$a" ] //检测字符串长度是否为0,不为0返回 true
$ [ $a ] //检测字符串是否为空,不为空返回 true。
6.文件测试运算符
-b file [ -b $file ] //检测文件是否是块设备文件,如果是,则返回 true。
-c file //检测文件是否是字符设备文件,如果是,则返回 true。
-d file //检测文件是否是目录,如果是,则返回 true。
-f file //检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。
-g file //测文件是否设置了 SGID 位,如果是,则返回 true。
-k file //检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。
-p file //检测文件是否是有名管道,如果是,则返回 true。
-u file //检测文件是否设置了 SUID 位,如果是,则返回 true。
-r file //检测文件是否可读,如果是,则返回 true。
-w file //检测文件是否可写,如果是,则返回 true。
-x file //检测文件是否可执行,如果是,则返回 true。
-s file //检测文件是否为空(文件大小是否大于0),不为空返回 true。
-e file //检测文件(包括目录)是否存在,如果是,则返回 true。
七 echo命令
1.echo "It is a test"
2.echo ""It is a test""
3.显示变量
read name
echo "$name It is a test"
4显示换行
echo -e "OK!
" // -e 开启转义
echo -e "OK! c" // c 不换行
5显示结果定向至文件
echo "It is a test" > myfile
6 显示命令执行结果
echo `date`
八 printf 命令
printf format-string [arguments...]
九 流程控制
1.if else 语句
if condition
then
command1
command2
...
commandN
else
command
fi
2.if else-if else
if condition1
then
command1
elif condition2
then
command2
else
commandN
fi
3.if else语句经常与test命令结合使用
num1=$[2*3]
num2=$[1+5]
if test $[num1] -eq $[num2]
then
echo '两个数字相等!'
else
echo '两个数字不相等!'
fi
4.for循环
for var in item1 item2 ... itemN
do
command1
command2
...
commandN
done
5. while 语句
while condition
do
command
done
int=1
while(( $int<=5 ))
do
echo $int
let "int++"
done
6.until 循环 //until 循环与 while 循环在处理方式上刚好相反
until condition
do
command
done
7.case 语句
case 值 in
模式1)
command1
command2
...
commandN
;;
模式2)
command1
command2
...
commandN
;;
esac
8.跳出循环 break和continue。
十 函数
1.自定义函数
[ function ] funname [()]
{
action;
[return int;]
}
1、可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
2、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255
funWithReturn(){
echo "两个数字分别为 $1 和 $2 !" //当n>=10时,需要使用${n}来获取参数
return $(($1+$2))
}
funWithReturn 1 2
echo "输入的两个数字之和为 $? !"
函数返回值在调用该函数后通过 $? 来获得。
注意:所有函数在使用前必须定义。这意味着必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用。调用函数仅使用其函数名即可。