1、编写shell程序的步骤:
1、创建以.sh为扩展名的文件 如:vi hello.sh
2、编辑脚本文件
1、第一行以“#!”开头,声明所使用的的shell的全路径
2、脚本中适当增加注释。注释的语法以“#”开头
#!/bin/bash
#打印输出hello.sh
echo "hello,world!"
3、增加脚本文件执行权限 chmod 775 hello.sh
4、运行脚本
1、进入脚本文件目录,然后执行:./hello.sh
2、以/bin/sh脚本名来运行,如:/bin/sh hello.sh
2、变量的定义和引用
1、变量的定义:(1)shell中的变量名可以有字母、数字、下划线组成,但字母不能作为变量名的第一个字符
(2)通过赋值符符号“=”来定义一个变量的值。
如:myname='tang' #字符串类型,不解析任何字符串
courses=“asdfgh” #双引号内部会解析$和反斜杠特殊字符
sum=100;price=1.254
now_time=`date` #反引号执行系统命令
shell的变量类型只有字符串类型,所以当你不用引号引起来的时候,要保证变量的值不包含特殊符号,如空格符、美元符、&符
2、变量的引用:使用美元符号$加变量名,来引用一个变量的值
如:定义变量:programe_name="httpd"
引用变量:echo $programe_name 或 echo ${programe_name}
3、变量名外面的花括号
是可选的,加花括号是为了帮助解释器识别变量的边界,比如下面这种情况:
#!/bin/bash
for skill in php java linux db2
do
echo "I am good at ${skill}Script" #帮助shell解释器识别边界
done
#此处如果不加{},运行结果会怎样?
3、环境变量、局部变量以及预定义变量
环境变量:指在操作系统中用来指定操作系统运行环境的一些参数,如:PATH,PWD,USER、当前使用的shell名称等
常见的环境变量:PATH:系统路径
HOME:当前用户的家
HISTSIZE:保存历史命令记录的条数
LOGNAME:当前用户登录名
HOATNAME:主机名称。若应用程序要用到主机名称的话,一般是从这个环境变量中取的
SHELL:当前用户用的那种shell
LANG/LANGUGE:和语言相关的环境变量,使用多种语言的用户可以修改此环境变量
MAIL:当前用户的邮件存放目录
查看环境变量:env:显示所有环境变量。
echo $PATH:显示某一个环境变量的值
局部变量包括:
1、在shell脚本中由用户定义的变量。shell脚本中由用户定义的变量作用域是从被定义的地方开始,到shell结束为止,起作用域为脚本,离开本脚本变量无效
2、在用户登录的shell中定义的变量,重新登录后该变量消失
预定义变量:预定义变量和环境变量相类似,也是在shell默认定义了的变量。所不同的是用户只能根据shell的定义来使用这些变量,而不能重新定义它,所有的预定义变量都是由$符和另一个符号组成,
常用的shell预定义变量有:
$# 位置参数的数量
$* 所有位置参数的内容
$@ 所有位置参数的内容
$n n为数字,$0表示命令名称。$1表示命令第一个参数,以此类推
$? 命令执行后返回的状态,0表示成功,非0表示失败
$$ 当前进程的进程号PID
$! 后台运行的最后一个进程号PID。很少用,了解即可
$0 当前执行的进程名。
如:echo $0
4、脚本的输入输出
1、echo 输出:命令发送数据到标准的输出设备
echo两个重要的参数:
-e:识别输出内容里的转义序列。echo -e "hello\tworld" 结果:hello world
-n:忽略结尾的换行。ehco -e -n "hello\tworld" 结果:hello world[root@constos]$
2、printf 输出:和echo类似,printf也可以输出变量,printf还可以安装格式输出变量。
注:1、printf 的默认输出没有换行,换行需要自己加“\n”
2、printf 支持格式化输出printf "Name:%s,Age:%d,Address:%s\n" $name $age $address
3、read 输入。读取标准输入设备的下一行,标准输入中的新一行到换行符前的所有字符串都会被读取,并赋值给对应的变量,可以结合echo一起实现读取并输出的功能
[root@centos6 app]# vi read_echo.sh
#!/bin/sh
echo "please input your ipaddress"
read ipaddr
echo "my ip address is $ipaddr"
运行:sh read_echo.sh
结果:please input your ipaddress
192.168.1.103
给出输入提示的read用法:read -p "提示信息:" myaddr
例:read -p "please input your username:" username
4、<< 按行输入。可以被认为是一种重定向符。重定向脚本文件中的一行作为到一个命令的输入
操作符<<被放在输入重定向的命令之后,紧跟在<<的各行命令的输入,输入的结尾通过文件结束符(ctrl+D)表示,也可以自己定义定界符,定界符后的单词作为输入各行的定界符
注意结束时的定界符一定要顶格写。
例:1、用<<符作为每一行的命令输入来操作数据库。
[root@centos6 app]# vi operate_mysqldb.sh
#!/bin/sh
/usr/local/mysql5.6.17/bin/mysql <<! #自定义定界符
status
select count(*) from test.student
!
2、自动连接ftp服务器来下载数据
1 #!/bin/sh
2 #演练用“<<”按行输入来上传下载文件
3 ftpserver=192.168.1.100
4 rq=`date+%Y%m%d`
5 cd /root/jcy/mydocs
6 ftp -i -n <<!
7 open $ftpserver
8 user oracle post
9 cd ems
10 bin
11 get $rq.dat
12 bye
13 !
View Code