天天看点

Shell 的简单常用语法Shell 中的 $0, $#, $*, $@, $?, $$和命令行参数

逻辑比较符号

-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。