Bash Scripts-I

1.什么是Bash脚本?

BASH = GNU Bourne-Again Shell,BASH 是 GNU 组织开发和推广的一个项目。 Bash脚本类似批处理,简单来讲就是把许多的指令集合在一起,并提供循环条件、判断等重要功能,语法简单实用,用以编写程序,大大简化管理员的操作,并可以完成图形工具所无法实现的功能。

2.如何创建一个新的shell脚本?

创建包含bash命令的文本文件。文件的第一行应为:
!/bin/bash 使文件可执行(使用chmod +x scripts)

将文件放置在用户的$PATH的目录中
~/bin – 用于用户的私有程序
/usr/local/bin – 本地开发、系统上的其他人使用的脚本
/usr/local/sbin - 本地开发、由root使用的脚本
直接运行脚本和使用source命令运行脚本是不同的!
脚本调试模式:
!/bin/bash -x
bash -x scripts
 


3.引用和转义

引用和转义在shell解析字符串时用于去除字符串中特殊字符或保留词语的特殊含义。这会导致按字面处理字符串,而不是展开变量或将其部分内容视作具有特殊含义。

引用有三种类型:

弱引用
将字符串放置在双引号中,保留字符串中所有字符的文字值,
、‘、 和!字符除外。换言之,变量扩展和命令扩展在双引号内仍起作用。echo“canIhavea FRUIT”
echo “The current time is $(date +%r).” 强引用
将字符串放置在单引号中,保留字符串中所有字符的文字值,同时禁用所有扩展:
echo “Make $$$ Fast”
rm ‘untitled folder’? 转义
非引用的\是转义字符。它保留了下一个字符的文字值。(例如,$PATH是确切的字符串$PATH,而不是PATH变量的内容。)
echo Make \$\$\$ Fast!
ls untitled\ folder

这里写图片描述

这里写图片描述

4.Shell变量

shell变量用于为稍后在脚本中使用的名称指定值,并且仅限于shell命令行或从中声明变量的脚本。

若要定义或指定值:
FRUIT=apple
若要参考或使用变量:
FRUIT {FRUIT}

5.命令替换

命令替换在子shell中执行指定命令并用命令输出替换脚本中的命令替换。

语法:
(shellcommand)示例:touchdatafile. (id -un)
TODAY=$(date +%Y-%m-%d)

练习:将/etc下所有以.conf结尾的文件 打包到当前目录,并且名称带有执行时间的信息。


6.算术运算符

算术运算符指的是可以在程序中实现加、减、乘、除等数学运算的运算符。
这里写图片描述

7.Shell计算命令

<1>用$[]表示数学运算。

<2>用expr表示数学运算。

<3>用let指示数学运算。

<4>用(())表示数学运算。bash内建功能,效率高。


8.循环

for循环用于值列表中的相同命令的重复。

NUM初值为2,步长为2,循环到8


课堂上的练习题:

1.编写脚本,执行后可自动建立用户。



2. 5秒倒计时:




作业题:

编写 script.sh实现:

1. script.sh  /mnt/userfile  /mnt/passfile

2. 当要建立的用户已经存在不做任何操作。

3. 当脚本后所之指定的文件个数少于2 时,显示提示语:please  give  me  userfile  or  passwd  file

4. 当所给文件的行数不一致时,显示提示语:/mnt/userfile's  line  is  different  /mnt/passwdfile's  line


脚本截图:



测试:

(1)当要建立的用户已经存在不做任何操作,其中user1,user2存在;user3,user4,user5不存在。


(2)当脚本后所之指定的文件个数少于2 时,显示提示语:please  give  me  userfile  or  passwd  file


(3)当所给文件的行数不一致时,显示提示语:/mnt/userfile's  line  is  different  /mnt/passwdfile's  line。此时,/mnt/userfile文件5行,/mnt/passwdfile3行。


脚本解释:

while [ "$#" -lt "2" ]                                                             ##用来判断脚本后指定的文件个数是否少于两个
        do
        echo "please give me userfile or passwd file: "    ##如果满足条件,则输出提示语
        exit 0                                                                            ##成功完成程序,逻辑真,在指定的文件中找到了模式
        done



a=`cat $1 | wc -l`                                                                  ##变量a,b的值分别等于脚本后跟的文件的行数
b=`cat $2 | wc -l`
        while [ "$a" -ne "$b" ]                                                ##当a,b不相等时,即所指定两文件行数不一致
        do
        echo "/mnt/userfile's line is different /mnt/passwdfile's line"    ##输出提示语
        exit 0                                                                            ##成功完成程序,逻辑真,在指定的文件中找到了模式
        done                                                                             




for ((i=1;i<=$a;i++))                                     ##$a的值等于脚本后指定的第一个文件的行数

do
        name=`sed -n "$i"p $1`                     ##使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。                                    
        pass=`sed -n "$i"p $2`
        useradd $name &>/dev/null               ##建立不存在的用户
        num=`echo $?`                                    ##查看num退出状态的值
        if [ "$num" -eq "0" ];then                   ##如果num=0,则证明所要建立的用户不存在
        echo $pass | passwd --stdin $name  ##建立不存在的用户,并给密码
        else
        echo "                  " &>/dev/null           ##如果用户已经存在,则不做任何操作
        fi                                                             ##fi为if语句的结束,相当于end if ,不加会出现报错
done

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值