一.脚本执行命令和控制语句
1.if语句
vim CS
#! /bin/bash
echo "Please enter PassWord"
read passWord
if [ "$passWord" = "myPassWord" ]
then
echo "Welcome!!"
else
echo "Wrong PassWord;"
fi
保存退出设置权限 执行得到
如果输入myPassWord 得到 Welcome!!否则输出wrong PassWord;
2case语句
语法
case word in
pattern-1)
command-1
;;
pattern-2)
command-2
;;
...
pattern-N)
command-N
;;
esac
变量word逐一通pattern-1到pattern-N的模式进行比较,当找到一个模式是,就紧跟执行后面的命令 commands 如果未找到命令 就什么也不做
另外;;只在case命令中出现 shell一旦遇到该命令就跳转到case语句的最后,
举例子
其为 opensuse中截取的一段控制 SSH服务器的脚本
#! /bin/bash
case "$1" in
start)
echo -n " Starting SSH daemon"
startproc -f -p $SSHD_PIDFILE $SSHD_BIN $SSHD_OPTS -o "PidFile=$SSHD_PIDFILE"
rc_status -v
;;
stop)
echo -n "shutting down SSH daemon"
killproc -p $ SSHD_PIDFILE _TERM $SSHD_BIN
rc_status -v
;;
restart)
$0 stop
$0 start
rc_status
;;
二.条件测试
1. if判断的依据
if ./testscript -1
then
echo "testscript exit -1"
fi
if ./testscript 0
then
echo "testscript exit 0"
fi
if ./testscript 1
then
echo "testscript exit 1"
fi
if语句实际上判断的是 程序的返回值,返回0表示为真,非0为假
2.test命令和空格的使用
语法
test expr
expr命令式通过test命令可以理解的选项来构建的
如 test “$password"="Terry"
如果两者相等,那么test命令就会返回0,反之返回1 test的同义词为[]
语法为 [expr]
对比三条命令
password=”Terry"
test "$password" = "Terry"
[ "$password" = "Terry" ]
第一条是赋值语句,因此无空格
第二条是条件测试命令 要有空格
第三条是条件测试命令 要有空格
赋值语句中加上空格会导致语法错误
而条件测试命令不加空格也会导致语法错误
shell是一个命令解释器,而不是一门编程语言
test 和[都是实实在在的程序
#! /bin/bash
read password
if [ -z "$password" ]
then
echo "Please enter the password"
fi
表示用于判断用户的输入是否为空,如果用户什么都没有输入,就显示信息
暂不多讲
三、循环结构
1.while语句
语法
while test—-commands
do
commands
done
下面用脚本做一个计算1到100得和
#! /bin/bash
sum=0
number=1
while test $number -le 100 //le表示小于或者等于
do
sum=$[ $sum + $number ]
let number=$number+1
done
echo "The summary is $sum"
结果为5050
下面计算 1+2+3+。。。。+n的结果
#! /bin/bash
echo -n "Enter a number(>0):"
while read n
do
sum=0
count=1
if [ $n -gt 0 ]
then
while [ $count -le $n ]
do
sum=$[ $sum + $count ]
let count=$count+1
done
echo "the summary is $sum"
else
echo "Please enter a number greater than zero"
fi
echo -n "Enter a number(>0):"
done
2.until语句
基本语法为
until test-commands
do
commands
done
其实until语句是while语句的另一种写法,除了测试条件相反 因此这里不再赘述
3.for 语句
基本语法为
for variable [in list]
do
commands
done
举例
#! /bin/bash
echo "Please enter a number:"
read n
for i in `seq $n`
do
echo $i
done
运行脚本输入 10则输出1到10得数
seq接受一个数值范围
统计当前目录下文件的个数
#! /bin/bash
count=0
for file in `ls`
do
if ! [ -d $file ]
then
let count=$count+1
fi
done
echo "There are $count files"
注
用于字符串的比较选项
选项 描述
-z str 当字符串str长度为0时返回真
-n str 当字符串str长度大于0是返回真
str1=str2 相等 真
str1!=str2 不相等 真
用于文件测试的选项
选项 描述
-b file 当file是块文件时返回真
-c file 是字符文件 真
-d pathname 是目录
-e pathname 是指定的文件或目录存在
-f file 是常规文件
-g pathname 指定的文件或目录设置了SGID位时
-h file 是符号链接文件
-p file 命名管道
-r pathname 指定的文件或目录设置了可读权限
-s file 存在且大小为0
-u pathname 指定的文件或目录设置了SUID位时
-w pathname 指定的文件或目录设定了可写权限
-x pathname 可执行权限
-o pahtname 被当前用户拥有时
用于数字比较的选项
选项 对应的英语 描述
-eq equal 如果相等返回真
-ne not equal 不相等
-lt lower than 小于
-le lower or equal 小于或者等于
-gt greater than 大于
-ge greater or equal 大于或者等于
复合表达式操作符
操作符 描述
!expr 非运算,当expr为假时返回真
expr1 -a expr2 与运算
expr1 -o expr2 或运算
4.用户输入命令
read从标准输入接受一行信息
read命令接受一个变量名作为参数,把从标准输入接受到得信息存放在这个变量中
#! /bin/bash
read first second
echo $first
echo $second
输入Hello World!
输出
Hello
World!
5.脚本执行命令
控制脚本行为的命令exit和trap
exit是退出脚本并且返回一个特定的值,
trap用于捕获信号
1.exit命令
exit强行退出脚本 并且向调用这个脚本的进程返回一个整数值
如 #! /bin/bash
exit 1
2.trap 命令
#! /bin/bash
trap 'echo "Type quit to exit"‘ INT
while [ "$input" != 'quit' ]
do
read input
done
INT 信号当用户在shell中按ctrl+c快捷键时被发送
#! /bin/bash
trap 'echo "Goodbye"; exit' EXIT
echo "Type 'quit' to exit"
while [ "$input" != 'quit' ]
do
read input
done
执行结果Type 'quit' to exit
quit
Goodbye
其它有用的shell命令
命令 描述
cut 以指定的方式分各行,并输出特定的部分
diff 找出两个文件的不同点
sort 对输入的行进行排序
uniq 删除已经排好序的输入中的重复行
tr 转换或者删除字符
wc 统计字符 单词和行的数量
substr 提取字符中的一部分
seq 生成整数序列
这些命令对从事shell编程的用户很有用,但这里暂不做介绍
shell还有更深的东西等待我们去学习,但目前只是想了解下,因此暂不做研究。