shell编程
在Linux中,Shell不但能与用户进行逐个命令交互执行,也可以通过脚本语言进行编程。
第一个shell程序
1、写shell程序
用vim打开并建立一个shell文件,开头固定 #!/bin/bash,表示用的是 bash 语法,# 后面为注释,date 显示日期,echo 打印字符串
[zcy@zcy ~]$ mkdir myprogram
[zcy@zcy ~]$ cd myprogram/
[zcy@zcy myprogram]$ vim first.sh
#!/bin/bash
#This is my first sh
date
echo "hello world!"
[zcy@zcy myprogram]$ echo $SHELL
/bin/bash
//默认的shell为 bash
[zcy@zcy myprogram]$ cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh
//查看系统内置了那几种shell
2、运行shell程序
第一种 直接运行
#/usr/program/first
使用这种方法时,需首先设置该文件的执行权限。
如果执行当前目录下的脚本文件,通常也应该使用一个点表示当前目录,如执行当前目录下的脚本文件test,可使用命令:# ./test
[zcy@zcy myprogram]$ chmod a+x first.sh
[zcy@zcy myprogram]$ ll first.sh
-rwxrwxr-x. 1 zcy zcy 58 6月 6 19:43 first.sh
[zcy@zcy myprogram]$ ./first.sh
2020年 06月 06日 星期六 19:43:42 CST
hello world!
第二种 利用shell程序运行
#bash /usr/program/first
[zcy@zcy myprogram]$ sh -x first.sh
+ date
2020年 06月 06日 星期六 19:44:07 CST
+ echo 'hello world!'
hello world!
[zcy@zcy myprogram]$ sh first.sh
2020年 06月 06日 星期六 19:44:46 CST
hello world!
shell语法介绍
(1)使用变量
在Shell程序中所有变量保存的值都是字符串。
在Linux的Shell中,可以使用以下几种变量:
1.环境变量:是指与Shell执行的环境相关的一些变量。Shell环境变量在Shell启动时,就已定义好,如PATH,HOME,MAIL等,这些变量用户还可以重新定义。可使用set命令查看系统中各环境变量的值。
2.用户自定义变量: 变量名=变量值
3.预定义变量(系统变量):用户不能修改,只能引用这些变量。所有的预定义变量都是由“$”符号与另一个符号组成的,常用的Shell预定义变量有以下几个:
$#:位置参数的数量
$*:所有位置参数的内容
$?:命令执行后返回的状态
$$:当前进程的进程号
$!:后台运行的最后一个进程号
$0:当前执行的进程名
#!/bin/bash
echo "the letter you like is:$1 $2 $3" #输出位置变量的参数
echo "本脚本名:" $0
echo "本脚本中参数的个数:" $#
echo "上一条命令的返回值:" $?
cd /hom
#故意输错
echo #?
#上一条命令执行失败 返回非0
cd /home
echo #?
echo "pid;" $$
(2)输入/输出内部命令
1.输出命令:echo
2.输入命令:read
举例3:编写一个Shell程序contact,接受用户输入的用户名和电话号码,将这些信息显示在终端上,并保存到contact.txt文件vi中。
#!/bin/bash
read -p "your name and phone:" NAME PHONE
echo $NAME,$PHONE
echo $NAME,$PHONE>contact.txt
shell调试
调试跟踪
1.-n选项
bash命令的“-n”选项使Shell不执行脚本,仅检查脚本中的语法问题。
2.-v选项
bash命令的“-v”选项使Shell在执行程序过程中,将读入的每一个命令行都原样输出到终端。
3.-x选项
bash命令的“-x”选项使Shell在执行程序过程中,把执行的每一个命令在行首用一个“+”号加上对应的命令显示在终端上,并把每一个变量和该变量的值也显示出来。使用该选项更方便跟踪程序的执行过程。
实例
1.增加用户账户
举例20:编写一个Shell程序addaccount.sh,在系统中增加四个账户,同时设定他们的初始密码为123456,主组群为wl15。

2.统计子目录和文件数量
举例21:
编写一个Shell程序count.sh,统计当前目录中子目录以及文件的数量。
- 九九乘法表
举例22:编写乘法口诀cfkj.sh,打印出九九乘法表。