1、 删除/etc/grub.conf文件中行首的空白符

sed s@^[[:space:]]*@@' /etc/grub.conf

2、 替换/etc/inittab文件中"id:3:initdefault:" 一行中的数字为5

3、 删除/etc/inittab文件中的空白行

sed /^$/d /etc/inittab

4、 删除/etc/inittab文件中开头的#号

sed 's/^#*//g' /etc/inittab

5、 删除某文件中开头的#号及后面的空白字符,但要求#号后面必须有空白字符

sed s/^#[[:space:]]*//g 123.txt

6、 删除某文件中以空白字符后面跟#类的行中的开头的空白字符及#

#abc

# hello world

#hi world

sed s/^[[:space:]]*#//g 123.txt

7、 取出一个文件路径的目录名称

/etc/fstab

/var/log

取出etc 和var

目录名:

echo "/etc/rc.d/" | sed -r 's@^(/.*/)[^/]+/?@\1@g'

基名:

echo "/etc/rc.d/" | sed -r 's@^/.*/([^/]+)/?@\1@g'

老师标准答案:

sed练习:
1、删除/etc/grub.conf文件中行首的空白符;
sed -r 's@^[[:spapce:]]+@@g' /etc/grub.conf
2、替换/etc/inittab文件中"id:3:initdefault:"一行中的数字为5;
sed 's@\(id:\)[0-9]\(:initdefault:\)@\15\2@g' /etc/inittab
3、删除/etc/inittab文件中的空白行;
sed '/^$/d' /etc/inittab
4、删除/etc/inittab文件中开头的#号;
sed 's@^#@@g' /etc/inittab
5、删除某文件中开头的#号及后面的空白字符,但要求#号后面必须有空白字符;
sed -r 's@^#[[:space:]]+@@g' /etc/inittab
6、删除某文件中以空白字符后面跟#类的行中的开头的空白字符及#
sed -r 's@^[[:space:]]+#@@g' /etc/inittab
7、取出一个文件路径的目录名称;
echo "/etc/rc.d/" | sed -r 's@^(/.*/)[^/]+/?@\1@g'    
基名:
echo "/etc/rc.d/" | sed -r 's@^/.*/([^/]+)/?@\1@g'

#abc
# hello world
   # hi world

练习:
传递一个用户名参数给脚本,判断此用户的用户名跟其基本组的组名是否一致,并将结果显示出来。
#!/bin/bash
#

if ! id $1 &> /dev/null; then

echo "No such user"

exit 10

fi
if [ `id -n -u $1` == `id -n -g $1` ]; then
  echo "The same"
else
  echo "Not the same"
fi

=================================================================

练习:写一个脚本

传递一个参数(单字符就行)给脚本,如参数为q、quit、Q、Quit,就退出脚本,否则, 就显示用户的参数:

#!/bin/bash
#
if [ $1 = 'q' ];then
  echo "Quitting"
  exit 0
elif [ $1 = 'Q'];then
  echo "Quiting"
  exit 1
elif [ $1 = 'Quit' ]; then
echo "Quitting"
  exit 2
elif [ $1 = 'QUIT' ]; then
  echo "quiting"
  exit 3
else
  echo "$1"
fi

=======================================================================

练习:
传递三个参数给脚本,第一个为整数,第二个为算术运算符,第三个为整数,将计算结果显示出来,要求保留两位精度。形如:
./calc.sh 5 / 2

提示:

echo "scale=2;111/22;" | bc

bc <<< "scale=2;111/22"

#!/bin/bash
#
A=$1
x=$2
B=$3
result= echo "scale=2;$A$x$B;"|bc
echo $result

====================================================================

写一个脚本:
判断当前主机的CPU生产商,其信息在/proc/cpuinfo文件中vendor id一行中。
如果其生产商为AuthenticAMD,就显示其为AMD公司;
如果其生产商为GenuineIntel,就显示其为Intel公司;
否则,就说其为非主流公司;

#!/bin/bash
#
mycpu=`cat /proc/cpuinfo | grep vendor | cut -d: -f2 | head -1 | sed 's/^[[:space:]]//g'`
if [ $mycpu = "GenuineIntel" ]; then
  echo "INTEL chip inside"
elif [ $mycpu = "GenuineIntel" ]; then
  echo "AMD chip inside"
else
  echo "unkown cpu type"
fi

=====================================================================

写一个脚本:
给脚本传递三个整数,判断其中的最大数和最小数,并显示出来。
MAX=0
MAX -eq $1
MAX=$1
MAX -lt $2
MAX=$2

用两两比较法

#!/bin/bash
#
MAX=0
MIN=0
if [ $1 -lt $2 ]; then
  MAX=$2
  MIN=$1
else
  MAX=$1
  MIN=$2
fi
if [ $MAX -lt $3 ]; then
  MAX=$3
else
  MIN=$3
fi
echo "Max number is $MAX, the min number is $MIN"

======================================================================

练习:
传递3个参数给脚本,参数均为用户名。将此些用户的帐号信息提取出来后放置于/tmp/testusers.txt文件中,并要求每一行行首有行号。

echo "1 $LINES" >> / /tmp/testusers

echo "2 $LINES" >> / tmp/testusers

####脚本有问题###

!/bin/bash
#
for I in `seq 1 $#`;do
  #echo "`cat /etc/passwd | grep $I`" >> /tmp/tempusers
  echo $`$I`
done

=======================================================================

循环练习

向系统内所有用户问好:

LINES=`wc -l /etc/passwd | cut -d' ' -f1`

for I in `seq 1 $LINES`;do echo "Hello, `head -n $I /etc/passwd| tail -1 | cut -d: -f1`";done

======================================================================

写一个脚本:
1、设定变量FILE的值为/etc/passwd
2、依次向/etc/passwd中的每个用户问好,并显示对方的shell,形如: 
     Hello, root, your shell: /bin/bash
3、统计一共有多少个用户

扩展: 只向默认shell为bash的用户问好

#!/bin/bash
#
FILE=/etc/passwd
LINES=`wc -l /etc/passwd| cut -d' ' -f1`
for I in `seq 1 $LINES`;do
  echo "Hello,`cat /etc/passwd | head -n $I | tail -1 | cut -d: -f1 ` , Your shell is `cat /etc/passwd| head -n $I | tail -1 | cut -d: -f7`"
done

扩展: 只向默认shell为bash的用户问好,

扩展版:

#!/bin/bash
#
SUM=0
FILE=/etc/passwd
LINES=`wc -l /etc/passwd| cut -d' ' -f1`
for I in `seq 1 $LINES`;do
  USER=`cat /etc/passwd | head -n $I | tail -1 | cut -d: -f1 `
  USHELL=`cat /etc/passwd| head -n $I | tail -1 | cut -d: -f7`
  if [[ $USHELL == '/bin/bash' ]]; then       #if $USHELL is null, then you     will get error with the     sinlge[], so please use     double[[]] when     judge the string equation.
  echo "Hello, $USER , Your shell is $USHELL"
  SUM=$[$SUM+1]
  fi
done
echo "Total user is $SUM"

=======================================================================

写一个脚本:
1、添加10个用户user1到user10,密码同用户名;但要求只有用户不存在的情况下才能添加;

#!/bin/bash
#
for I in `seq 1 10`; do
  if ! id user$I &> /dev/null; then
    useradd user$I &> /dev/null
    echo "user$I"| passwd --stdin user$I &> /dev/nul
  else
    echo "user$I already existed, will not create"
  fi
done

扩展:
接受一个参数:
add: 添加用户user1..user10
del: 删除用户user1..user10
其它:退出

#!/bin/bash
#
if [[ $1 == add ]]; then
  for I in `seq 1 10`; do
    if ! id user$I &> /dev/null; then
      useradd user$I &> /dev/null
      echo "user$I"| passwd --stdin user$I &> /dev/nul
    else
      echo "user$I already existed, will not create"
    fi
  done
elif [[ $1 == del ]];then
  echo "delete function is running"
  for I in `seq 1 10`;do
  userdel -rf user$I &> /dev/null
  done
fi

====================================================================

写一个脚本:
计算100以内所有能被3整除的正整数的和;
取模,取余:%
3%2=1
100%55=45

#!/bin/bash
#
SUM=0
for I in `seq 1 100`;do
  if [ $(($I%3)) = 0 ];then
    SUM=$[$SUM+$I]
  fi
done
echo "The sum is $SUM"

====================================================================

写一个脚本:
计算100以内所有奇数的和以及所有偶数的和;分别显示之;

#!/bin/bash
#
J=0
O=0
for I in `seq 1 100`;do
  if [ $(($I%2)) = 0 ]; then
    J=$[$J+$I]
  else
    O=$[$O+$I]
  fi
done
echo "SUM J is $J"
echo "SU O is $O"

=====================================================================

写一个脚本,分别显示当前系统上所有默认shell为bash的用户和默认shell为/sbin/nologin的用户,并统计各类shell下的用户总数。显示结果形如:
BASH,3users,they are:
root,redhat,gentoo

NOLOGIN, 2users, they are:
bin,ftp

可以追加到一个文件内,然后在 显示那个文件

#!/bin/bash
#
ushells=""
bash_count=0
nologin_count=0
LINES=`cat /etc/passwd | wc -l`
for I in `seq 1 $LINES`;do
  if [[ `cat /etc/passwd | head -n $I | tail -1 | cut -d: -f7` == /bin/bash ]]; then
   echo " `cat /etc/passwd | head -n $I | tail -1 | cut -d: -f1`" >> /tmp/bash_users
   bash_count=$[$bash_count+1]
  elif [[ `cat /etc/passwd | head -n $I | tail -1 | cut -d: -f7` == /sbin/nologin ]]; then 
    echo " `cat /etc/passwd | head -n $I | tail -1 | cut -d: -f1`" >> /tmp/nologin_users
    nologin=$[$nologin+1]
  fi
done
echo "BASH, $bash_countusers, they are:"
echo `cat /tmp/bash_users`
echo "NOLOGIN, $nologin_countusers,they are:"
echo `cat /tmp/nologin_users`

=======================================================================

转载于:https://blog.51cto.com/richier/1632742

bash编程练习题及答案相关推荐

  1. 海伦公式c语言编程funcd,c语言编程练习题及答案_0.doc

    c语言编程练习题及答案_0 精品文档 2016全新精品资料-全新公文范文-全程指导写作 –独家原创 PAGE1 / NUMPAGES19 c语言编程练习题及答案 学生数 印数 考核方式 闭卷 考核时间 ...

  2. python练习题及答案-python编程练习题和答案.doc

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbspPython python编程练习题和答案.doc3页 本文档一 ...

  3. 职坐标c语言,C/C++知识点之C语言编程练习题及答案分享

    本文主要向大家介绍了C/C++知识点之C语言编程练习题及答案分享,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助. 1. 题目:写一个程序,判断两个浮点数是否足够精确. /*  Fi ...

  4. c语言编程练习题及答案

    [程序1]­ 题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?­ 1.程序分析:可填在百位.十位.个位的数字都是1.2.3.4.组成所有的排列后再去­ 掉不满足条件的 ...

  5. 编程练习题 没答案版

    假设s是一个型如:"cat223dog456nice25ttt98″的串,其特征是数字与字符交错.我们希望知道这个串中有多少个数字段.假设该串必以字符开始.我们给出了如下代码,请完善之: b ...

  6. python程序题斐波那契数列通项公式,Python斐波那契数列应用,编程练习题实例六...

    python斐波那契数列,本文是关于Python编程练习题和答案实例六,斐波那契数列应用的示例.引用百度关于斐波那契数列的介绍,大家先简单来的了解下,什么是斐波那契数列? 斐波那契数列(Fibonac ...

  7. python兔子编程_Python兔子生兔子算法,编程练习题实例十一

    Python兔子生兔子算法,编程练习题实例十一 Python兔子生兔子算法,编程练习题实例十一 没学习python之前就听说过一个兔子生兔子的数学算法问题.现在学习了python编程后,自然要用pyt ...

  8. python兔子生兔子_Python兔子生兔子算法,编程练习题实例十一

    没学习python之前就听说过一个兔子生兔子的数学算法问题.现在学习了python编程后,自然要用python语言来解决这个问题啦.Python编程练习题和答案实例十一,兔子生兔子的算法详解如下. P ...

  9. 011235813用java写出来_C 编程练习题大全(带答案)

    以下为<C 编程练习题大全(带答案)>的无排版文字预览,完整格式请下载 下载前请仔细阅读文字预览以及下方图片预览.图片预览是什么样的,下载的文档就是什么样的. 一.简单问题: 5. 编程计 ...

最新文章

  1. openMP的一点使用经验 四
  2. 【Android NDK 开发】Android.mk 配置动态库 ( Android Studio 配置动态库 | 动态库加载版本限制 | 本章仅做参考推荐使用 CMake 配置动态库 )
  3. 趣学python3(47)--尾递归
  4. boost::math::tools::continued_fraction_b用法的测试程序
  5. 站长工具|百度搜索框提示功能
  6. 编程语言的发展趋势及未来方向(1):历史回顾及趋势概述
  7. php写带分页的留言板,php中分页程序之基于留言板详解_PHP教程
  8. linux环境安装 kafka 0.8.2.1 jdk1.6
  9. 经典排序算法之基数排序(C语言版)
  10. ollyice的学习
  11. 两个特征是独立好还是正相关好_【概率论与数理统计】第5期:随机变量的数字特征...
  12. VS 2005 2008 项目模板丢失问题
  13. 改进我个人知识管理手段
  14. WinEdt10注册码
  15. 利用 Python 插件 xlwings 读写 Excel
  16. 酒水茶饮行业的门店管理系统进销存软件怎么挑选?
  17. 13个开源GIS软件
  18. 用python制作正态分布图_使用python绘制3维正态分布图的方法
  19. 在线考试系统html源码,jQuery在线答题考试系统代码
  20. 计算机在微表情的应用,基于深度卷积神经网络的微表情识别

热门文章

  1. php获取谷歌地图api接口,谷歌地图 API 开发之信息窗口
  2. Windows:系统环境变量配置提示系统环境变量太大的问题三种解决方案亲测可用
  3. SQL SERVER 判断是否存在并删除某个数据库、表、视图、触发器、储存过程、函数
  4. 图像降噪算法——高斯低通滤波
  5. 【杂谈】如何让2020年秋招CV项目能力更加硬核,可深入学习有三秋季划4大领域32个方向
  6. 隐藏系统运行对话框立即启用
  7. java8 stream 做累加_Java8新特性之Stream(上)|乐字节
  8. 功能性农业实用技术 谋定·农业大健康-李喜贵:粤黔东西协作
  9. 外媒分析:iPhone销量低于预期是中国市场疲软影响的
  10. JavaScript函数练习