SHELL 的定义:如果你有一系列经常使用的Linux命令,你可以把他们存储在一个文件中。Shell可以读取这个文件并执行其中的命令。这样的文件被称为脚本文件。
SHELL 的结构:shell 类型
文件格式:abc.sh
函数
主过程
一般模板
#!/bin/bash shell类型
#a simple shell script example
#a function
sayhello() 函数
{
echo "Enter Your name:"
read name 读取来自键盘输入的变量
echo "Hello $name"
}
echo "programme starts here..." 主过程
sayhello
echo "programme ends."
特殊符号:
1、注释符#
除了#!/bin/bash里的#特殊
2、美元符
变量符。与反斜杠转义符相反,使其后的普通字符作为变量名,如
a表示变量a的值。变量字符长度超过1个时,用{}括起来
3、、单引号
被引起的字符全部做普通字符,即全部原样
echo ‘my $SHELL’
4、双引号
引号内的内容,除$、转义符\、倒引号这三个保留特殊功能,其他字符均做普通字符。
pwd`即pwd命令的执行结果
5、倒引号(数字1键旁边的那个键)
引号内的字符串当做shell命令行解释执行,得到的结果取代整个倒引号括起来的部分。
$LOGNAME 系统变量
#!/bin/bash
echo "abcdefg........"
syshello
syshello()
{
echo "enter function....."
ls -l
echo "over function....."
}
echo "start......."
sy```shello
echo "exit......"
常用环境变量
1、HOME变量
Linux系统中的每个用户都有一个相关的称作HOME的目录。
2、PATH序的搜索
包含一列用冒号定界的目录的路径名字,便于可执行程序的搜索。
部分内部变量是:
$#
——传送给shell程序的位置参数的数量
$?
——最后命令的完成码或者在shell程序内部执行的shell程序(返回值)
$0
——shell程序的名称
$*
——调用shell程序时所传送的全部参数的单字符串, “参数1”“参数2”…形式保存的参数
$n
———-第n个参数
条件判断命令:
test n1 -参数 n2(或 –参数 表达式)真返回0,假返回1。
参数:
-lt 小于
-le小于等于
-gt 大于
-ge 大于等于
-eq 等于
-ne 不等于
#!/bin/bash
if [ $# -ne 1 ]
then
echo "Usage:$0 filename"
exit 1
fi
<< A
if test -f $1
then
echo "file exist!"
else
touch $1
echo "create file:$1"
fi
A
test -f $1 && echo "file exist!"
test -f $1 || touch $1
shell运算符和C语言基本类似,也有分支、循环流程控制。
简单举例
后面例子涉及的命令:
seq命令:产生数字序列
比如 seq 100 400
expr命令:对表达式求值
[]直接求值命令:对被括起来的表达式求值
循环语句:
#!/bin/bash
<< A
for i in asn 12 dd 56464sfs 646g
do
echo $i
done
A
<< B
s=0
for i in 1 2 3 4 5 6 7 8 9 10
do
s=$((s+i))
done
echo $s
B
s=0
for i in `seq 1 10`
do
s=$((s+i))
done
echo $s
#!/bin/bash
s=0
i=0
while [ $i -le 100 ]
do
s=$((s+i))
i=$((i+1))
done
echo $s
**文件测试
-f 存在且是普通文件
-d 存在且是目录
-s 存在且字节数大于0
-r 存在且可读
-w 存在且可写
-x 存在且可执行
如:test -d “mydoc”
判断mydoc是否是目录
字符串测试
test s 字符串s非空
test s1=s2 字符串s1等于s2
test s1!=s2 字符串s1不等于s2
test -z s 字符串长=0,即为空串
test -n s 字符串长>0
=: 等于则为真
!=:不相等则为真
-z字符串:字符串长度为零则为真
-n字符串:字符串长度不为零则为真**n字符串:字符串长度不为零则为真
几个 SHELL 的应用
1,编写一个名为iffile程序,它执行时判断/bin目录下date文件是否存在?
filename=/bin/date
if
(test -f "$filename")
then
echo "exist"
fi
2.编写一个名为menu的程序,实现简单的弹出式菜单功能,用户能根据显示的菜单项从键盘选择执行对应的命令。
#!/bin/bash
clear
echo " ---------MENU---------"
echo
echo "1.Find files modified in last 24 hours"
echo "2.The free disk space"
echo "3.Space consumed by this user"
echo "4.Exit"
echo
echo -n " Select:"
read choice
case $choice in
1)find $HOME -mtime -1 -print;;
2)df;;
3)du -s $HOME;;
4)exit;;
*)echo "Invalid option"
esac
3.编写一个名为greet的问候程序,执行时能根据系统当前的时间向用户输出问候信息。设从半夜到中午为早晨,中午到下午六点为下午,下午六点到半夜为晚上。
#! /bin/bash
hour=`date | cut -c 10-11`
if
test "$hour" -ge 0 "$hour" -lt 12;
then
echo "Good morning!"
elif
test "$hour" -ge 12 -a "$hour" -le 18;
then
echo "Good afternoon!"
else
echo "Good evening!"
fi