0811linux基础小记(shell编程基础)

1.编写脚本/root/bin/systeminfo.sh,显示当前主机系统信息,包括主机名,IPv4地址,操作系统版本,内核版本,CPU型号,内存大小,硬盘大小。

#!/bin/bash

echo "hostname: `hostname`"

echo "OS VERSION: `cat /etc/issue`"

echo "KERNEL VERSION: `uname -r`"

echo "CPU MODEL:`lscpu|grep 'Model name'|tr -s " "|cut -d: -f2`"

echo "MEM CAPACITY:`cat /proc/meminfo|head -1|tr -s " "|cut -d: -f2`"

echo "DISK CAPACITY: `fdisk -l|sed -n 2p|sed -r 's@.*[[:space:]]([0-9].*GB).*@\1@g'`"

echo "IPv4: `ifconfig|sed -n 2p|sed -r 's#.*inet[[:space:]](.*)[[:space:]]*net.*#\1#g'`"blob.png

blob.png

2.编写脚本/root/bin/backup.sh,可实现每日将/etc/目录备份到/root/etcYYYY-mm-dd

#!/bin/bash

backdir="/root/etc$(date +%F)"

cp -r /etc/. $backdir && echo "backup $backdir finished."

blob.png

blob.png

3.编写脚本/root/bin/disk.sh,显示当前硬盘分区中空间利用率最大的值

#!/bin/bash

echo "the max use of disk is `df -h|tr -s " "|cut -d " " -f5|sed -n '2,$p'|sort -n|tail -1`"

blob.png

blob.png

4.编写脚本/root/bin/links.sh,显示正连接本主机的每个远程主机的IPv4地址和连接数,并按连接数从大到小排序

#!/bin/bash

echo -e "远程主机连接统计为:\n\t连接数\t远程主机IP"

netstat -nt|tr -s ' '|cut -d' ' -f5|tr -cs '0-9.' '\n'|egrep '([0-9]+.){3}[0-9]+'|sort|uniq -c|sort -nr|tr -s ' ' '\t'

blob.png

blob.png

5.写一个脚本/root/bin/sumid.sh,计算/etc/passwd文件中的第10个用户和第20用户的ID之和

#!/bin/bash

id1=`cat /etc/passwd|sed -n 10p|cut -d: -f3`

id2=`cat /etc/passwd|sed -n 20p|cut -d: -f3`

sum=$[id1+id2]

echo "the sum of two users ID is $sum"

blob.png

6.写一个脚本/root/bin/sumspace.sh,传递两个文件路径作为参数给脚本,计算这两个文件中所有空白行之和

#!/bin/bash

File1=`grep '^$' $1|wc -l`

File2=`grep '^$' $2|wc -l`

let Sumspace=$File1+$File2

echo "the sum of $1 and $2 spacelines are $Sumspace"

unset File1

unset File2

unset Sumspace

blob.png

blob.png 


7.写一个脚本/root/bin/sumfile.sh,统计/etc, /var, /usr目录中共有多少个一级子目录和文件

#!/bin/bash

File1=`ls -A /etc |wc -l`

File2=`ls -A /var |wc -l`

File3=`ls -A /usr |wc -l`

let Sumfile=$File1+$File2+$File3

echo "the number of all 1level dir and file are $Sumfile"blob.png

blob.png

8.写一个脚本/root/bin/argsnum.sh,接受一个文件路径作为参数;如果参数个数小于1,则提示用户“至少应该给一个参数”,并立即退出;如果参数个数不小于1,则显示第一个参数所指向的文件中的空白行数

#!/bin/bash

[[ $# -lt 1 ]] && echo "at least give a parameter" ||  echo "The number of blank lines in the file that the 1st arg points to is  `grep '^$' $1|wc -l`"

blob.png

blob.png

9.写一个脚本/root/bin/hostping.sh,接受一个主机的IPv4地址做为参数,测试是否可连通。如果能ping通,则提示用户“该IP地址可访问”;如果不可ping通,则提示用户“该IP地址不可访问”

#!/bin/bash

ping -c1 -W1 $1 &> /dev/null && echo the host is up || echo the host is down

blob.png

blob.png

10.chmod -rw /tmp/file1,编写脚本per.sh,判断当前用户对/tmp/fiile1文件是否不可读且不可写

#!/bin/bash

[ -r /tmp/file1 -a -w /tmp/file1 ] && echo "可读可写" || echo  "不可读不可写"

blob.png

blob.png

11.编写脚本nologin.shlogin.sh,实现禁止和充许普通用户登录系统。

vim nologin.sh

#!/bin/bash

[ -f /etc/nologin ] && echo "ordinary user can't log on." || touch /etc/nologin;

echo "ordinary user can't log on."

blob.png

vim login.sh

#!/bin/bash

[ -f /etc/nologin ] && (rm -rf /etc/nologin;echo "ordinary user can log on.") ||

 echo "ordinary user can log on."

blob.png

12.写一个脚本/root/bin/hostping.sh,接受一个主机的IPv4地址做为参数,先判断是否合格IP,否,提示IP格式不合法并退出,是,测试是否可连通。如果能ping通,则提示用户“该IP地址可访问”;如果不可ping通,则提示用户“该IP地址不可访问”

过滤ip 

#!/bin/bash

echo $1 > loginip

egrep "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\>" loginip &> /dev/null && echo "It's a qulified IP" && (ping -c1 -W1 $1 &> /dev/null && echo the host is up || echo the host is down) || (echo "It's an illegal IP";exit)

blob.png

blob.png

13.计算1+2+3+…+100的值

echo $((`seq -s+ 1 100`))

echo 0 +{1..100} | bc

for i in {1..100};do let "sum=$sum +$i";echo "sum=$sum";done 

14.计算从脚本第一参数A开始,到第二个参数B的所有数字的总和,判断B是否大于A,否提示错误并退出,是则计算之

#!/bin/bash

[ $1 -lt $2 ] && echo $((`seq -s+ $1 $2`)) || (echo " $2 !> $1 . error!" ; exit)

blob.png

blob.png

 

 

 

$# 是传给脚本的参数个数

$0 是脚本本身的名字

$1 是传递给该shell脚本的第一个参数

$2 是传递给该shell脚本的第二个参数

$@ 是传给脚本的所有参数的列表

$* 是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9

$$ 是脚本运行的当前进程ID

$? 是显示最后命令的退出状态,0表示没有错误,其他表示有错误

blob.png

blob.png

 

 

$*
所有的位置参数,被作为一个单词.
注意:"$*"必须被""引用.
$@
与$*同义,但是每个参数都是一个独立的""引用字串,这就意味着参数被完整地传递,
并没有被解释和扩展.这也意味着,参数列表中的每个参数都被当成一个独立的单词.
注意:"$@"必须被引用.

$@ $* 只在被双引号包起来的时候才会有差异
双引号括起来的情况:
$*将所有的参数认为是一个字段

 

原创文章,作者:victorycommander,如若转载,请注明出处:http://www.178linux.com/35700

(0)
victorycommandervictorycommander
上一篇 2016-08-15 09:22
下一篇 2016-08-15 09:22

相关推荐

  • GRUB

    GRUB(Boot Loader):  grub: GRand Unified Bootloader grub 0.x: grub legacy grub 1.x: grub2 grub legacy: stage1: mbr stage1_5: mbr之后的扇区,让stage1中的bootloader能识别stage2所在的分区上的文件系统; s…

    Linux干货 2016-04-12
  • 什么叫Linux

    什么叫linux:     Linux是一套免费使用和自由传播的类Unix操作系统,它主要用于基于Intel x86系列CPU的计算机上。这个系统是由全世界各地的成千上万的程序员设计和实现的。其目的是建立不受任何商品化软件的版权制约的、全世界都能自由使用的Unix兼容产品。 谁编写的linux: Linux的出现,最早…

    Linux干货 2017-03-27
  • 文件的从属权限和特殊权限

    基础权限   rwx     经过今天的洗礼,了解了文件的权限位(rwx),而权限对于目录和文件有着不同的意义     使用ls -l 命令后可以看到     -rw-r–r–. 1 root root 1…

    Linux干货 2016-08-04
  • 马哥教育网络班21期+第10周课程练习

    1、请详细描述CentOS系统的启动流程(详细到每个过程系统做了哪些事情)     1)开机后会进行POST(开机加电自检),加载BIOS,之后会根据BIOS上的boot  sequence(引导加载次序)找到第一个有引导程序的设备,找到MBR,bootloader(引导加载器)就安装在MBR内。M…

    Linux干货 2016-09-19
  • 数据结构-栈和队列

    1.栈 1.1 栈的定义 栈是一种特殊的线性表。其特殊性在于限定插入和删除数据元素的操作只能在线性表的一端进行。如下所示: 结论:后进先出(Last In First Out),简称为LIFO线性表。 栈的基本运算有六种: 构造空栈:InitStack(S)、 判栈空: StackEmpty(S)、 判栈满: StackFull(S)、 …

    Linux干货 2015-04-07
  • 用户,组和权限管理 基础命令整理

    安全3A任何一个安全策略都应该有Authentication(认证)、Authentication(授权)、Accouting|Audition(审计)这三个措施。 用户(User)Linux用户是安全3A中的Authentication(认证)措施。用户在登录时,系统会检查用户输入的用户名和密码。如果用户输入的用户名和密码匹配,会根据用户信息给用户分配一个…

    Linux干货 2017-03-16

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-16 16:53

    作业完成的很出色,标题需要用点心,尽量不要带日期,总结部分不能省略哦,好记性不如烂笔头。