背景知识

  Shell 是用户与内核进行交互操作的一种接口,是 Linux 最重要的软件之一。目前最流行的 Shell 称为 bash Shell,bash Shell 脚本编程以其简洁、高效而著称,多年来成为 Linux 程序员和系统管理员解决实际问题的利器。Shell 是操作系统的最外层。Shell 合并编程语言以控制进程和文件,以及启动和控制其它程序。Shell 通过提示您输入,向操作系统解释该输入,然后处理来自操作系统的任何结果输出来管理您与操作系统之间的交互。Shell 提供了与操作系统通信的方式。此通信以交互的方式(来自键盘的输入立即操作)或作为一个 Shell 脚本执行。Shell 脚本是Shell 和操作系统命令的序列,它存储在文件中。当登录到系统中时,系统定位要执行的 Shell 的名称。在它执行之后,Shell 显示一个命令提示符。普通用户的此提示符通常是一个 $(美元符)。当提示符下输入命令并按下 Enter 键时,Shell 对命令进行求值,并尝试执行它。取决于命令说明,Shell 将命令输出写到屏幕或重定向到输出。然后它返回命令提示符,并等待您输入另一个命令。命令行是输入所在的行,它包含 Shell 提示符。每行的基本格式如下:

  $ 命令 参数(一个或多个)

Shell 视命令行的第一个字(直到第一个空格)为命令,所有后继字为自变量。

在此推荐大家使用zsh,具体下载安装版本请参考http://macshuo.com/?p=676

1:判断文件是否为块设备或字符设备文件,如果是将其拷贝到/dev 目录下

  1、read 命令从键盘或文件中读入信息,将其赋给变量(一个或多个),直到遇到回车符或文件结束符为止。
  2、I/O 设备大致分为两类:块设备和字符设备。块设备将信息存储在固定大小的块中,每个块都有自己的地址。数据块的大小通常在 512字节到 32768 字节之间。块设备的基本特征是每个块都能独立于其它块而读写。磁盘是最常见的块设备。

#!/bin/bash
read -p "please input a filename:" filename
if test -b "$filename" -o -c "$filename";then
echo "$filename is a device file" && cp $filename /dev
else
echo "$filename is not a device file"
fi

2:模拟 Linux 登陆 Shell

#!/bin/bash
x=wj #这是用户名
y= #这是密码
read -p "please input yourname:" yourname
read -p "please input yourkey:" yourkey
if test "$x" = "$yourname" -a "$y" = "$yourkey" ;then bash #注意test后面比较大小的空格不能省
else
  echo"please try again"
fi

3:从键盘读取两个数,并比较两个数大小,并打印结果

#!/bin/bash
read -p "please input num1:" num1
read -p "please input num2:" num2
if test $num1 = $num2 ;then
  echo "num1=num2"
elif test $num1 -gt $num2 ;then
  echo "num1>num2"
else test $num1 -lt $num2
  echo "num1<num2"
fi

4:查找/root/目录下是否存在指定文件

#!/bin/bash

cd /root
read -p "please input filename:" filename
if test -e $filename;then
echo "$filename is exist"
else
echo "$filename is not exist"
fi

5:删除当前目录下大小为 0 的文件

#/bin/bash
for filename in `ls`
do
if test -d $filename;then
  b=
 else
  a=$(ls -l $filename | awk '{ print $5 }')
if test $a -eq ;then
    rm $filename
fi
fi
done

6:查找最大文件

#!/bin/bash

a=
for name in *
do
if test -d $name;then
    c=
else
    b=$(ls -l $name | awk '{print $5}')
    if test $b -ge $a;then
      a=$b
namemax=$name
fi
fi
done
echo "the max file is $namemax"

7:打印当前用户(不用 whoami)

#!/bin/bash

echo "Current User is :"echo $(who |  sed -n '1p' | awk '{print $1}')

8:查找当前目录中所有大于 50k 的文件,把这些文件名写到一个文本文件中,并统计其个数

wc 命令的功能为统计指定文件中的字节数、字数、行数,并将统计结果显示输出

#!/bin/bash

find ./ -size +50k > toingji.txt
cat tongji.txt |wc -l

9:一个函数,利用 shift 计算所有参数乘积,假设参数均为整数

1、expr 命令为 Linux 中的命令,一般用于整数值计算,但也可用于字符串操作。

2、对于某个命令行参数,其参数个数可以不固定,但是可以通过$*或$@进行循环操作。若用户要求 Shell 在不知道变量个数的情况下,还能逐个处理参数,也就是在$1 之后是$2,$2 之后是$3。在未运行shift 命令之前$1 是可用的,当使用 shift 命令之后,原来的$2 会变成$1,并且原有的$1 变得不可用,通过$#命令获得的参数个数也会少1

3、shift:用于左移命令行参数

#!/bin/bash

result=1
# $#表示参数个数
while test $# -gt
do
result=`expr $ \* $result`
shift
done
echo "the result is $result"

10:测试一个文件是否已经被排序过

#!/bin/bash

read -p "please input your filename:" file
sort -C $file
# $?表示执行上一个指令的返回值 (显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误)
a=$?
if test $a -eq ;then
  echo "$file is youxu"
else
  echo "$file is wuxu"
fi

11:判断用户是否在运行

#!/bin/bash

a=$(ps | grep "$$" | awk '{print $2}')
b=$( who| grep "$a" | awk '{print $1}')
read -p "please input a username:" username
if [ "$b" = "$username" ];then
echo "the ueser is running"
else
echo "the ueser is not running"
fi

12:在当前目录下交互式创建文件夹(文件夹已存在则打印提示输入新名字)

#!/bin/bash

read -p "please input dirname:" file
if test -d $file;then
echo dir is exist please try again
else
read -p "create dir now?[y/n] " sel
if test "$sel" = "y";then
mkdir $file
elif test "$sel" = "n";then
bash
else
echo "Your input is wrong"
fi
fi

13:获取本机 IP 地址

#!/bin/bash

a=$(ifconfig | grep "inet 地址:" |  awk '{print $2}' | sed 's/地址://g' |sed -n '1p' )
echo "ip is $a"

14:打印无密码用户

#!/bin/bash

echo "no passwd user are:"
a=$(sudo cat /etc/shadow | grep "*" | awk 'BEGIN { FS=":" }{print $1}')
#在处理输入文件以前,域分隔符(FS)被设为冒号
echo $a

15:写一个脚本,利用循环计算 n的阶乘

#!/bin/bash

read -p "please input n:" n
sum=
for a in `seq $n`
do
sum=`expr $sum \* $a`
done
echo "n! = $sum"

16:利用 case 语句测试输入字符是否是:小写/大写/数字/其他

#!/bin/bash

read -p "please input something:" Key
case $Key in
[[:lower:]]) echo "It is lowercase";;
[[:upper:]]) echo "It is uppercase";;
[-]) echo "It is number";;
esac

17:测试文件是否包含特定的文本内容

#!/bin/bash

read -p "enter a string: " string
read -p "enter a filename: " filename
grep -q "$string" $filename #在file中查找str(不输出找到的内容),成功返回0
if test $? -eq ;then
echo "The text exists in the file"
else
echo "Text does not exist in the file"
fi

18:检测给定的单词是否为词典中的单词

#!/bin/bash

read -p "enter a string:" string
#/usr/share/dict/american-english是ubuntu 系统中英式英语常用单词列表的字典文件
grep -q "$string" /usr/share/dict/american-english
if test $? -eq ;then
echo "match directionary"
else
echo "not match directionary"
fi

shell编程入门的更多相关文章

  1. Linux Shell编程入门

    从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁.用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操 ...

  2. 转:Linux Shell编程入门

    http://www.cnblogs.com/suyang/archive/2008/05/18/1201990.html 从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来 ...

  3. 转inux Shell编程入门

    http://www.cnblogs.com/suyang/archive/2008/05/18/1201990.html 从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来 ...

  4. Linux下的shell编程入门

    通常情况下,我们从命令行输入命令每输入一次就能够得到系统的一次响应.一旦需要我们一个接着一个的输入命令而最后才得到结果的时候,这样的做法显然就没有效率.要达到这样的目的,通常我们利用shell程序或者 ...

  5. Shell编程入门基础上

    前言 为什么学 Shell Shell 脚本语言是实现 Linux/UNIX 系统管理及自动化运维所必备的重要工具, Linux/UNIX 系统的底层及基础应用软件的核心大都涉及 Shell 脚本的内 ...

  6. [转]Linux Shell编程入门

    转自:http://www.cnblogs.com/suyang/archive/2008/05/18/1201990.html 从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的 ...

  7. SHELL编程入门简介

    一.SHELL软件概念和应用场景 1) 学习Linux技术,不是为了学习系统安装.命令操作.用户权限.配置IP.网络管理,学习Linux技术重点:基于Linux系统部署和维护各种应用软件.程序(Apa ...

  8. Linux简介及常用命令使用5--linux shell编程入门

    生成 测试数据的shell脚本 Vim data_create.sh rm -rf ./data.txttouch data.txtfor((i=0;i<2000;i++))dostr=',na ...

  9. Shell编程入门(再版)(在)

    简单的演示样本Shell规划 演示样例1. #!/bin/bash #This is to show what a shell script looks like echo "Our fir ...

随机推荐

  1. GJM :JS + CSS3 打造炫酷3D相册 [转载]

    感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经 ...

  2. <记录学习>(前三天)京东页面各种注意点

    培训学校第1到3天先学习HTML现在流行的是HTML5,目前学习的是HTML5规范.(给有基础一定的人学习)前三天学习的是京东页面的编写,和以前写的不同,页面看上去和自己写的一样,但老师讲的还是有很多 ...

  3. java中newInstance()和new()

    在Java开发特别是数据库开发中,经常会用到Class.forName( )这个方法.通过查询Java Documentation我们会发现使用Class.forName( )静态方法的目的是为了动态 ...

  4. 当struts遇上json,没爱了

    用过struts的人,或者用过spring MVC的人,都知道domain model接受参数是多么的方便,而且又有依赖注入,简直是自动拿参数,再自动帮你转成java bean,但是也有不足的地方 说 ...

  5. SharePoint 创建模版页

    [1]需要安装SharePoint Designer  最新版编辑工具 [2]我用的是SharePoint Server 2013 如果是Office 请匹配寻找 1.创建母版页面 打开右上角-网站设 ...

  6. DevExpress VCL 13.1.4支持Delphi /C++Builder XE5

    DevExpress VCL 13.1.4支持Delphi /C++Builder XE5 重大变化 ExpressLibrary dxHalfOfPi常数声明已经从cxGeometry单元移到了cx ...

  7. swift开发多线程篇 - 多线程基础

    swift开发多线程篇 - 多线程基础 iOS 的三种多线程技术 (1)NSThread  使用NSThread对象建立一个线程非常方便 但是!要使用NSThread管理多个线程非常困难,不推荐使用 ...

  8. Android 调用系统照相机拍照和录像

    本文实现android系统照相机的调用来拍照 项目的布局相当简单,只有一个Button: <RelativeLayout xmlns:android="http://schemas.a ...

  9. iOS Apple Pay

    iOS 苹果支付 需要证书支持支付功能 targets 打开支付功能按钮 //ApplePay#import <PassKit/PassKit.h>                     ...

  10. 【代码笔记】iOS-将400电话中间加上-线

    一,代码. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. ...