逻辑比较符号
-eq //等于
-ne //不等于
-gt //大于 (greater )
-lt //小于 (less)
-ge //大于等于
-le //小于等于
命令的逻辑关系:
- 在linux 中 命令执行状态:0 为真,其他为假
逻辑与: &&
- 第一个条件为假时,第二条件不用再判断,最终结果已经有;第一个条件为真时,第二条件必须得判断;
- 逻辑或: ||
- 逻辑非: !
shell 中 while 的使用
- 利用while循环计算1到100的和:
#!/bin/bash
i=1
sum=0
while [ $i -le 100 ]
do
let sum=sum+$i
let i++
done
echo $sum
- 利用while循环打印一个5x5的 *
#!/bin/bash
i=1
j=1
while [ $i -le 5 ]
do
while [ $j -le 5 ]
do
echo -n "* "
let j++
done
echo
let i++
let j=1
done
- 使用read结合while循环读取文本文件:
#!/bin/bash
file=$1 #将位置参数1的文件名复制给file
if [ $# -lt 1 ];then #判断用户是否输入了位置参数
echo "Usage:$0 filepath"
exit
fi
while read -r line #从file文件中读取文件内容赋值给line(使用参数r会屏蔽文本中的特殊符号,只做输出不做转译)
do
echo $line #输出文件内容
done < $file
- 按列读取文件内容
#!/bin/bash
file=$1
if [[ $# -lt 1 ]]
then
echo "Usage: $0 please enter you filepath"
exit
fi
while read -r f1 f2 f3 #将文件内容分为三列
do
echo "file 1:$f1 ===> file 2:$f2 ===> file 3:$f3" #按列输出文件内容
done < "$file"
- while循环中的死循环:
- 示例:利用死循环,让用户做选择,根据客户的选择打印相应结果
#!/bin/bash
#打印菜单
while :
do
echo "********************"
echo " menu "
echo "1.tima and date"
echo "2.system info"
echo "3.uesrs are doing"
echo "4.exit"
echo "********************"
read -p "enter you choice [1-4]:" choice
#根据客户的选择做相应的操作
case $choice in
1)
echo "today is `date +%Y-%m-%d`"
echo "time is `date +%H:%M:%S`"
read -p "press [enter] key to continue..." Key #暂停循环,提示客户按enter键继续
;;
2)
uname -r
read -p "press [enter] key to continue..." Key
;;
3)
w
read -p "press [enter] key to continue..." Key
;;
4)
echo "Bye!"
exit 0
;;
*)
echo "error"
read -p "press [enter] key to continue..." Key
;;
esac
done
linux 下 EOF 的写法
- EOF是 END Of File 的缩写,表示自定义终止符.既然自定义,那么EOF就不是固定的,可以随意设置别名,在linux按ctrl-d就代表EOF.
- EOF一般会配合cat能够多行文本输出.
其用法如下:
<<EOF //开始
…
EOF //结束
- 还可以自定义,比如自定义:
<<BBB //开始
…
BBB //结束
- 通过cat配合重定向能够生成文件并追加操作,在它之前先熟悉几个特殊符号:
< :输入重定向
> :输出重定向
>> :输出重定向,进行追加,不会覆盖之前内容
<< :标准输入来自命令行的一对分隔号的中间内容.
Shell 中的 $0, $#, $*, $@, $?, $$和命令行参数
- 位置参数
$0 当前脚本的文件名
$n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
$# 传递给脚本或函数的参数个数。
$* 传递给脚本或函数的所有参数。
$@ 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到。
$? 上个命令的退出状态,或函数的返回值。
$$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。
- $* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号(" “)包含时,都以”$1" “ 2 " … " 2" … " 2"…"n” 的形式输出所有参数。
- 但是当它们被双引号(" “)包含时,”$*" 会将所有的参数作为一个整体,以"$1 $2 … n " 的 形 式 输 出 所 有 参 数 ; " n"的形式输出所有参数;" n"的形式输出所有参数;"@" 会将各个参数分开,以"$1" “ 2 " … " 2" … " 2"…"n” 的形式输出所有参数。
- 退出状态
- $? 可以获取上一个命令的退出状态。所谓退出状态,就是上一个命令执行后的返回结果。退出状态是一个数字,一般情况下,大部分命令执行成功会返回 0,失败返回 1。