1. 什么是shell 脚本?
shell scripts 是将一些指令汇整起来一起执行,说白了就是若干个命令的集合,执行一个脚本,就可以执行多个命令,很方便,不需要编译,只要将脚本的权限改为可执行就可以.
1.1. 第一个shell scripts
[root@linux ~]# vim sh01.sh
#! /bin/bash--------------------------->宣告这个脚本所使用的shell名称
# Program: ---------------------------->注释,说明程序的功能
# This program is used to show "Hello World !" in screen.
# History: ---------------------------->注释,作者,建档日期
# 2014/01/03 Bruce First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin---------------------->环境变量的宣告
export PATH---------------------->导出环境变量
echo -e "Hello World !"----------------------->主要程序内容
exit 0 ----------------------->shell执行结束退出.
除了第一行#!/bin/bash不是注释,其他的#都是注释
1.2. shell scripts大体就分为5个部分
第一部分: 说明脚本所使用的shell
第二部分: 说明程序的内容
第三部分: 说明主要的环境变量
第四部分: 主要的程序内容
第五部分: 执行shell结束,返回执行结果.(可以通过在命令行执行 echo $?来观察执行的返回值)
2.和用户进行交互来确定变量的值
[root@linux ~]# vim sh02.sh
#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:
export PATH
read -p "Please input your first name:" firstname
read -p "Please input your last name:" lastname
echo -e "\nYour full name is:$firstname $lastname"
exit 0
3.脚本的执行方法:
在命令行执行
a. [root@linux ~]# bash sh02.sh
b. [root@linux ~]#chmod a+x sh02.sh;./sh02.sh
4.数值运算的方法
输入两个变量,并且输出这两个变量相乘的结果(bas shell只支持整数数据)
#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
export PATH
echo -e "You should input 2 number\n"
read -p "first number:" firstnumber
read -p "second number:" secondnumber
total=$(($firstnumber*$secondnumber)) 或 declare -i total=$firstnumber*$secondnumber(declare 定义变量的类型)
echo -e "\n The number $firstnumber x $secondnumber is ==>$totall"
5.test指令的测试功能
功能: 可以检测系统上面某些档案或者相关的属性
ex: [root@linux ~]# test -e /dmtsai ---------------->检测该目录是否存在(结果是不会显示任何信息的)
修改:
[root@linux ~]# test -e /dmtsai && echo "Not exist " || echo "exist"---------------------->可以用(echo $?来查看命令执行的结果,正确执行返回0,否者返回非0值)
5.1 test 的选项的含义
查看文件的类型
-e------------------------------->查看某文件是否存在(test -e filename)
-f-------------------------------->查看该档案名是否为文件
-d------------------------------->查看是否为目录
-b------------------------------->查看是否是个块设备
-c------------------------------->查看是否是一个字符设备
-S------------------------------->查看是否是一个socket
-p-------------------------------->查看是否是一个FIFO
-L--------------------------------->查看是否为链接文件(即通常所说的桌面快捷图标)
查看文件的权限
-r----------------------------------->查看文件是否可读(test -r filename)
-w---------------------------------->查看文件是否可写
-x----------------------------------->查看文件是否可执行
两个文件的比较
-nt----------------------------------->(newer than)判断文件file1是否比file2新(test file1 -nt file2)
-ot------------------------------------>(older than)判断文件file1是否比file2旧
-ef------------------------------------>判断file1与file2是否为同一个文档
两个整数之间的判定
-eq----------------------------------->判断两个数是否相等(test n1 -eq n2)
-nq----------------------------------->判断两个数是否不想等
-gt------------------------------------>判断n1是否大于n2
-lt------------------------------------->判断n1是否小于n2
-ge----------------------------------->判断n1是否大于等于n2
-le------------------------------------>判断n1是否小于等于n2
字符串的判断
-z------------------------------------>判断字符串是否为空字符串(test -z string)
-n----------------------------------->判断字符串是否是非空字符串(test [-n] string )
=------------------------------------->判断两字符串是否相等(test str1=str2)
!=------------------------------------->判断两个字符串是否不相等(test str1 != str2)
多重条件判断
-a------------------------------------->(and)判断两种情况是否同时成立(test -r file -a -x file,判断文件file是否具有读写权限)
-o------------------------------------->(or)两种情况任何一种成立
!--------------------------------------->非,(test ! -x file,判断file是否不具有可执行权限)
EX:
[root@linux ~] vim sh05.sh
#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
export PATH
# 1. 让使用者输入档案名,并且判断使用者是否真的有输入字符串
echo -e "The program will show you that filename is exist which input by you.\n"
read -p "Input a filename:" filename
test -z $filename && echo "You must input a filename." && exit 0
# 2. 判断档案是否存在
test ! -e $filename && echo "The filename $filename don't exist" && exit 0
# 3. 判断档案的类型与属性
test -f $filename && filetype="regulare file"
test -d $filename && filetype="directory"
test -r $filename && perm="readable"
test -w $filename && perm="$perm writable"
test -x $filename && perm="$perm executable"
# 4. 输出信息
echo "The filename: $filename is a $filetype"
echo "And the permission are : $perm"