分支语句
if语句
if [ condition ](输入的时候中括号里的条件要距离两边有一个空格的 距离,并且if离中括号也要有一个空格的距离)
then
command
elif[codition]then
command
else
command
fi
-eq 等于则为真
-ne 不等于则为真
-gt 大于则为真
-ge 大于等于则为真
-lt 小于则为真
-le 小于等于则为真
-a 并且
-o 或
if语句的例子
#!/bin/bash
read -p "please input a integer:" a
if [ $a -lt 10 ]
then
echo -e "小于10\n"
elif [ $a -lt 50 -a $a -gt 10 ]
then
echo -e "10<$a<50\n"
else
echo -e "no\n"
fi
read -p “提示的内容” 变量1 变量2 …
read -p “请输入文件名:” path1 path2
echo “$path1 $path2”
例:判断输入的年份是否是润年(润年条件:1、能被4整除,但不能被100整除的年份。2、能被100整除,又能被400整除的年份)
#!/bin/bash
read -p "please input a year:" year
#if [ [ year % 4==0 -a year % 100 -ne 0 ] -o [ year % 400==0 ] ]
if (( year % 4==0 && year % 100 != 0 || yeaer%400==0 ))
#if [ year%4==0 -a year%100!=0 ]
then
echo "是润年"
else
echo "不是润年"
fi
#这个是这一种方法,但是类似于if [ year%4==0 -a year%100!=0 ] -o [ year%400==0 ] 这个方法是不行的,我也不知道为啥,其他的都行
下面的是第二种方法
#!/bin/sh
echo "Please Input a year: "
read year
let "n1=$year % 4"
let "n2=$year % 100"
let "n3=$year % 400"
if [ "$n1" -ne 0 ]
then
leap=0
elif [ "$n2" -ne 0 ]
then
leap=1
elif [ "$n3" -ne 0 ]
then
leap=0
else
leap=1
fi
循环
shell中特有的
until [conditon]
do
command
done
for n in seq 1 5
do
echo $n
done
选择
case
#!/bin/bash
case $1 in
‘start’ | -s )
echo “start … done”
;;
‘stop’ | -t )
echo “stop…done”
;;
‘restart’ | -rt )
echo “restart … done”
;;
‘status’ | -st )
echo “status … done”
;;
* )
echo “default”
;;
esac
select
select value in A B C
do
case “$value” in
A)
echo “You Selected A”;;
B)
echo “You Selected B”;;
C)
echo “You Selected C”;;
*)
echo “You Selected NULL”;;
esac
break
done
注意下面的特殊用法:
#!/bin/bash
declare -a serial
serial=(1 2 3 4)
PS3="Enter a number: "
select var in “a” “b” “c” “d”
do
if ! echo ${serial[@]} | grep -q $REPLY; then
echo “please enter [1-4].”
continue
fi
echo “your anwser is: $var”
break
done
案例
1、编写一个bash脚本,给另一个文本文件加行号,并输出
输入重定向
输出重定向
mv
2、倒序输出文件(递归)
输入重定向
revrread1.sh
3:程序监控,当程序未运行的时候则运行程序
checkrun1.sh
lession1.sh
if [ $# -lt 1 ]
判断是否输入命令行参数
1:首先检查进程是否存在,命令如下
ps -ef |grep “lession2.sh”|grep -v “grep”
通过下面的命令来观察程序
ctrl+z (进程挂起)
fg 恢复
jobs用来查看目前的后台工作状态,显示结果里面最前面的数字号就是对应进程的jobnumber
jobs -l 查看后台工作状态
结束后台工作
kill %jobnumber
例如
kill %1
4:ip地址判断
准备一个ip地址文件,每行一个ip,读入数据,如果是IP地址
就输出显示
ip.txt
192.168.2.110
falkdjfajlskd
192.168.0.110