Shell的语法介绍
演示操作:关于环境变量
关于预定义变量
演示:
新建文件:
vim variable.sh
按 i 键编辑
#! /bin/bash
echo "The letters you like is : $1 $2 $3" #输出位置变量的参数
echo "本脚本名:" $0
echo "本脚本中参数的个数:"$#
echo "本脚本的所有参数:"$*
echo "上一条命令的返回值:"$? #0:成功;其他值:失败
cd /hom #切换至目录/home,此处故意输错,使命令不生效
echo $? #上一条命令(cd /hom)执行失败,返回非0
cd /home #此处输入正确
echo "上一条命令的返回值" $?
echo "当前进程的pid进程号:" $$
按Esc键,输入 :wq 保存退出
执行:
sh variable.sh
如上,如果直接按回车,没有给参数,输出就是0
下面给参数:
输入输出命令
操作演示:
创建文件contact.sh,编辑保存:
vim contact.sh
#! /bin/bash
# 参数-p把键盘输入的数据存入变量NAME,PHONE
read -p "Enter your name phone:" NAME PHONE
echo $NAME,$PHONE
echo $NAME,$PHONE>contact.txt
执行:
sh contact.sh
完成输入输出,而且也把内容存到了txt文件:
其他知识点:
使用变量
在Shell程序中,提供了说明和使用变量的功能。与高级编程语言不同,在Shell程序中所有变量保存的值都是字符串。
在Linux的Shell中,可以使用以下几种变量:
1.环境变量:是指与Shell执行的环境相关的一些变量。Shell环境变量在Shell启动时,就已定义好,如
PATH,HOME,MAIL
等,这些变量用户还可以重新定义。可使用set命令查看系统中各环境变量的值。2.用户自定义变量:
变量名=变量值
3.预定义变量(系统变量):用户不能修改,只能引用这些变量。
所有的预定义变量都是由“$
”符号与另一个符号组成的,常用的Shell预定义变量有以下几个:
$#
:位置参数的数量
$*
:所有位置参数的内容
$?
:命令执行后返回的状态
$$
:当前进程的进程号
$!
:后台运行的最后一个进程号
$0
:当前执行的进程名
输入/输出内部命令
1.输出命令:
echo
2.输入命令:
read
举例3:编写一个Shell程序contact,接受用户输入的用户名和电话号码,将这些信息显示在终端上,并保存到contact.txt文件中。
#!/bin/bash
echo Name:
read NAME
echo Telephone:
read PHONE
echo $NAME,$PHONE>contact.txt
条件测试
1.测试命令执行结果
执行任何Linux命令都可能存在两种状态:正确或错误。
若前一条命令正确执行,则返回状态值为0,返回值为任何非0值都表示执行命令出错。使用预定义变量“
$?
”可返回命令执行后的状态,在程序中可根据预定义变量“$?
”的值来判断前一条命令的执行是否正确。
2.测试文件状态
[ 测试表达式 ]
注意:中括号“[]”与测试表达式之间必须有一个空格来分隔。
测试文件状态可使用以下参数:
-e
文件名:若文件存在,返回真。
-r
文件名:若文件可读,返回真。
-w
文件名:若文件可写,返回真。
-x
文件名:若文件可执行,返回真。
-s
文件名:若文件类型为套接字文件,返回真。
-d
文件名:若文件类型为目录文件,返回真。
-f
文件名:若文件类型为普通文件,返回真。
-c
文件名:若文件类型为字符设备文件,返回真。
-b
文件名:若文件类型为块设备文件,返回真。举例4:isdir
举例5:compare1
3.测试数据值
-eq
:判断是否相等
-ne
:判断是否不相等
-gt
:判断是否大于
-ge
:判断是否大于等于
-lt
:判断是否小于
-le
:判断是否小于等于举例6:compare2
4.测试字符串:
= != -z -n
举例7:compare1
5.逻辑操作符:
! -a -o
流程控制语句
1.if条件语句
举例8:ifyuju
2.case条件语句
举例9:caseyuju
3.for循环语句
举例10:fortest举例11:loop1
4.while和until循环语句
举例12:whiletest举例13:loop2
举例14:untiltest
举例15:loop3
函数
举例16:hanshu举例17:func1
处理参数
1.位置参数
当调用Shell程序的命令行时,除了输入Shell程序名之外,还可以在后面跟上多个参数,这些参数与在命令行中的位置有关,因此称为位置参数。各位置参数之间用空格分隔,用
$1
表示第1个参数,$2
表示第2个参数,依次类推。而$0
是一个特殊的变量,其内容是当前Shell程序的文件名。举例18:parameter1
2.函数参数
向函数传递参数与向一般脚本传递参数一样,应使用预定义变量
$1~$9
来传递。函数取得所传参数后,将原始参数传回Shell脚本。举例19:sum1