Acfe 发表于 2018-8-19 10:58:42

Shell编程,经典问题

  70个经典的 Shell 脚本面试问题
  转载自:http://www.imooc.com/article/1131
  1) 如何向脚本传递参数 ?
  ./script argument
  例子: 显示文件名称脚本
  ./show.sh file1.txt
  cat show.sh
  #!/bin/bash
  echo $1
  (LCTT 译注:谢谢某匿名访客的提醒,原题有误,修改之。)
  2) 如何在脚本中使用参数 ?
  第一个参数 : $1,第二个参数 : $2
  例子 : 脚本会复制文件(arg1) 到目标地址(arg2)
  ./copy.sh file1.txt /tmp/
  cat copy.sh
  #!/bin/bash
  cp $1 $2
  3) 如何计算传递进来的参数 ?
  $#
  4) 如何在脚本中获取脚本名称 ?
  $0
  5) 如何检查之前的命令是否运行成功 ?
  $?
  6) 如何获取文件的最后一行 ?
  tail-1
  7) 如何获取文件的第一行 ?
  head-1
  8) 如何获取一个文件每一行的第三个元素 ?
  awk'{print $3}'
  9) 假如文件中每行第一个元素是 FIND,如何获取第二个元素
  awk'{ if ($1 == "FIND") print $2}'
  10) 如何调试 bash 脚本
  将 -xv 参数加到 #!/bin/bash 后
  例子:
  #!/bin/bash –xv
  11) 举例如何写一个函数 ?
  function example {
  echo "Hello world!"
  }
  12) 如何向连接两个字符串 ?
  V1="Hello"
  V2="World"
  V3=${V1}${V2}
  echo $V3
  输出
  HelloWorld
  13) 如何进行两个整数相加 ?
  V1=1
  V2=2
  let V3=$V1+$V2
  echo $V3
  输出
  3
  据 @kashu 的意见,本题的更佳回答为:
  两个整数相加,还有若干种方法实现:
  A=5
  B=6
  echo $(($A+$B))# 方法 2
  echo $[$A+$B]    # 方法 3
  expr $A + $B   # 方法 4
  echo $A+$B | bc# 方法 5
  awk 'BEGIN{print '"$A"'+'"$B"'}'   # 方法 6
  14) 如何检查文件系统中是否存在某个文件 ?
  if [ -f /var/log/messages ]
  then
  echo "File exists"
  fi
  15) 写出 shell 脚本中所有循环语法 ?
  for 循环 :
  foriin$(ls);do
  echo item:$i
  done
  while 循环 :
  #!/bin/bash
  COUNTER=0
  while [ $COUNTER -lt 10 ]; do
  echo The counter is $COUNTER
  let COUNTER=COUNTER+1
  done
  until 循环 :
  #!/bin/bash
  COUNTER=20
  until [ $COUNTER -lt 10 ]; do
  echo COUNTER $COUNTER
  let COUNTER-=1
  done
  16) 每个脚本开始的 #!/bin/sh 或 #!/bin/bash 表示什么意思 ?
  这一行说明要使用的 shell。#!/bin/bash 表示脚本使用 /bin/bash。对于 python 脚本,就是 #!/usr/bin/python。
  17) 如何获取文本文件的第 10 行 ?
  head -10 file|tail -1
  18) bash 脚本文件的第一个符号是什么
  #
  19) 命令:[ -z "" ] && echo 0 || echo 1 的输出是什么
  020) 命令 “export” 有什么用 ?
  使变量在子 shell 中可用。
  21) 如何在后台运行脚本 ?
  在脚本后面添加 “&”。
  据 @kashu 的意见,更好的答案是:
  nohup command&
  大部分时间我们可能是远程使用Linux,我碰到过由于网络断线使得在后台运行的command &没了...
  22) "chmod 500 script" 做什么 ?
  使脚本所有者拥有可执行权限。
  23) ">" 做什么 ?
  重定向输出流到文件或另一个流。
  24) & 和 && 有什么区别
  & - 希望脚本在后台运行的时候使用它
  && - 当前一个脚本成功完成才执行后面的命令/脚本的时候使用它
  25) 什么时候要在 [ condition ] 之前使用 “if” ?
  当条件满足时需要运行多条命令的时候。
  26) 命令: name=John && echo 'My name is $name' 的输出是什么
  variable
  27) bash shell 脚本中哪个符号用于注释 ?
  #
  28) 命令: echo ${new:-variable} 的输出是什么
  variable
  29) ' 和 " 引号有什么区别 ?
  ' - 当我们不希望把变量转换为值的时候使用它。
  " - 会计算所有变量的值并用值代替。
  30) 如何在脚本文件中重定向标准输出和标准错误流到 log.txt 文件 ?
  在脚本文件中添加 "exec >log.txt 2>&1" 命令。
  31) 如何只用 echo 命令获取字符串变量的一部分 ?
  echo ${variable:x:y}
  x - 起始位置
  y - 长度
  例子:
  variable="My name is Petras, and I am developer."
  echo ${variable:11:6} # 会显示 Petras
  32) 如果给定字符串 variable="User:123:321:/home/dir",如何只用 echo 命令获取 home_dir ?
  echo ${variable#::*:}
  或
  echo ${variable##*:}
  33) 如何从上面的字符串中获取 “User” ?
  echo ${variable%:::*}
  或
  echo ${variable%%:*}
  34) 如何使用 awk 列出 UID 小于 100 的用户 ?
  awk -F: '$3
页: [1]
查看完整版本: Shell编程,经典问题