wtuyss 发表于 2018-8-20 07:40:43

Linux shell编程学习实例与参数分析(二)

  第三章 shell的输入和输出
  1.echo    echo string
  -e 解析转移字符
  -n 回车不换行,linux系统默认回车换行
  转移字符 \c \t \f \n
  #!/bin/bash
  #echo
  echo -e "this echo's 3 newlne\n\n\n"
  echo "OK"
  echo
  echo "this is echo's 3 ewline\n\n\n"
  echo "this log file have all been done">mylogfile.txt
  $ sh echod.sh
  this echo's 3 newlne
  OK
  this is echo's 3 ewline\n\n\n
  上面可以看到有-e则可以解析转移字符,没有不能解析。echo空输出为空
  2.read 可以从键盘或文件的某一行文本中读入信息,并将其赋给一个变量
  read variable1 variable2
  eg.
  #!/bin/bash
  #readname
  echo -n "first name:"
  read firstname
  echo -n "last name:"
  read lastname
  echo "this name is $firstname $lastname"
  3.cat      显示文件的内容,创建内容,还可以显示控制字符
  cat filename1 filename2
  -v   显示控制字符(Windows文件)
  cat命令不会分页显示,要分页可以采用more、less
  4.管道|
  5.tee   把输出的一个副本输送到标准输出,另一个副本拷贝到相应的文件中,一般与管道合用
  tee files
  -a 在文件中追加
  eg.
  $ echo |tee myfile
  $ cat myfile
  将myfile文件置空
  6.文件重定向
  command>filename                                        ---覆盖输出
  command>>filename                                    ---追加输出
  command>filename>&1                                 ---把标准输出和标准错误重定向
  commandmyfile
  $ cat myfile

  Filesystem         >  /dev/sda1            20G 3.3G   16G 18% /
  none                  2.0G   0 2.0G   0% /dev/shm
  /dev/sda2            79G   17G   59G 23% /u01
  /dev/sda4            28G 3.9G   22G 15% /u02
  $ df -lh>>myfile
  $ cat myfile

  Filesystem         >  /dev/sda1            20G 3.3G   16G 18% /
  none                  2.0G   0 2.0G   0% /dev/shm
  /dev/sda2            79G   17G   59G 23% /u01
  /dev/sda4            28G 3.9G   22G 15% /u02

  Filesystem         >  /dev/sda1            20G 3.3G   16G 18% /
  none                  2.0G   0 2.0G   0% /dev/shm
  /dev/sda2            79G   17G   59G 23% /u01
  /dev/sda4            28G 3.9G   22G 15% /u02
  $ cat >>myfile Hubei
  > Suizhou
  > exit
  $ cat myfile
  China
  Hubei
  Suizhou
  7.exec      可以用来替代当前shell。现有任何环境变量都会清除
  第四章 控制流结构
  1.if语句
  if 条件1
  then
  命令1
  elif 条件2
  then
  命令2
  else
  命令3
  fi
  ------------------
  if 条件
  then 命令
  fi
  eg:
  #!/bin/bash
  #if test
  #this is a comment line
  if [ "10" -lt "12" ];then
  #yes 10 is less than 12
  echo "yes,10 is less than 12"
  else
  echo "no"
  fi
  注意:if语句必须以fi终止
  "10" 前一个空格,“12”后也有一个空格。这个条件都是通过test命令来指定。条件表达为test expression或者
  条件表达式中的比较函数
  man test
  NAME
  test - check file types and compare values
  SYNOPSIS
  test EXPRESSION
  [ EXPRESSION ]
  [ OPTION
  DESCRIPTION
  Exit with the status determined by EXPRESSION.
  --help display this help and exit
  --version
  output version information and exit
  EXPRESSION is true or false and sets exit status. It is one of:
  ( EXPRESSION )
  EXPRESSION is true
  ! EXPRESSION
  EXPRESSION is false
  EXPRESSION1 -a EXPRESSION2
  both EXPRESSION1 and EXPRESSION2 are true
  EXPRESSION1 -o EXPRESSION2
  either EXPRESSION1 or EXPRESSION2 is true
  [-n] STRING
  the length of STRING is nonzero
  -z STRING
  the length of STRING is zero
  STRING1 = STRING2
  the strings are equal
  STRING1 != STRING2
  the strings are not equal
  INTEGER1 -eq INTEGER2
  INTEGER1 is equal to INTEGER2
  INTEGER1 -ge INTEGER2
  INTEGER1 is greater than or equal to INTEGER2
  INTEGER1 -gt INTEGER2
  INTEGER1 is greater than INTEGER2
  INTEGER1 -le INTEGER2
  INTEGER1 is less than or equal to INTEGER2
  INTEGER1 -lt INTEGER2
  INTEGER1 is less than INTEGER2
  INTEGER1 -ne INTEGER2
  INTEGER1 is not equal to INTEGER2
  FILE1 -ef FILE2
  FILE1 and FILE2 have the same device and inode numbers
  FILE1 -nt FILE2
  FILE1 is newer (modification date) than FILE2
  FILE1 -ot FILE2
  FILE1 is older than FILE2
  -b FILE
  FILE exists and is block special
  -c FILE
  FILE exists and is character special
  -d FILE
  FILE exists and is a directory
  -e FILE
  FILE exists
  -f FILE
  FILE exists and is a regular file
  -g FILE
  FILE exists and is set-group-ID
  -h FILE
  FILE exists and is a symbolic link (same as -L)
  -G FILE

  FILE exists and is owned by the effective group>  -k FILE
  FILE exists and has its sticky bit set
  -L FILE
  FILE exists and is a symbolic link (same as -h)
  -O FILE

  FILE exists and is owned by the effective user>  -p FILE
  FILE exists and is a named pipe
  -r FILE
  FILE exists and is readable
  -s FILE

  FILE exists and has a>  -S FILE
  FILE exists and is a socket
  -t
  file descriptor FD (stdout by default) is opened on a terminal
  -u FILE
  FILE exists and its set-user-ID bit is set
  -w FILE
  FILE exists and is writable
  -x FILE
  FILE exists and is executable
  eg.
  #!/bin/bash
  #if test
  #this is a comment line
  echo "Enter your filename:"
  read myfile
  if [ -e $myfile ]
  then
  if [ -s $myfile ];then

  echo "$myfile exist and>  else

  echo "$myfile exist but>  fi
  else
  echo "file no exist"
  fi
  $ sh iftest.sh
  Enter your filename:
  11

  11 exist but>  2.case语句
  case语句为多选择语句。
  case 值 in
  模式1)
  命令1
  ;;
  模式2)
  命令2
  ;;
  esac
  eg.
  #!/bin/bash
  #case select
  echo -n "enter a number from 1 to 3:"
  read ans
  case $ans in
  1)
  echo "you select 1"
  ;;
  2)
  echo "you select 2"
  ;;
  3)
  echo "you select 3"
  ;;
  *)
  echo "`basename $0`:this is not between 1 and 3">&2
  exit;
  ;;
  esac
  3.for 循环
  for循环一般格式:
  for 变量名 in 列表 (列表以空格作为分割)
  do
  命令1
  命令2
  done
  eg:
  #!/bin/bash
  #forlist1
  for loop in 1 2 3 4 5
  do
  echo $loop
  done
  4.until循环
  until 条件
  do
  命令1
  命令2
  ...
  done
  条件测试发生在循环末尾,所以循环至少可以执行一次。
  5.
  while循环
  while 命令 (可以是一个命令也可以是多个,做条件测试)
  do
  命令1
  命令2
  ...
  done
  注意:如果从文件中读入变量
页: [1]
查看完整版本: Linux shell编程学习实例与参数分析(二)