复习二

复习二

bash的配置文件:

按生效范围划分:
    全部配置:
        /etc/profile
        /etc/profile.d/*.sh
        /etc/bashrc
    个人配置:
        ~/.bash_profile
        ~/.bashrc
按功能划分:
    环境变量,运行命令和脚本:
        全局:/etc/profile
            /etc/profile.d/*.sh
        个人:~/.bashrc_profile
    定义本地变量,命令别名:
        全局:/etc/bashrc
        个人:~/.bashrc
shell登录:
交互式登录:
    直接通过终端输入帐号密码登录:
    使用“su - UserName”或“su -l UserName”切换的用户
    /etc/profile-->/etc/profile.d*/.sh-->~/.bash_profile-->~/.bashrc--/etc/bashrc

    非交互式登录:
        su USERName
        图形界面下打开的终端
        执行脚本
        ~/.bashrc-->/etc/bashrc-->/etc/profile.d/*.sh

辑配置文件定义的新配置的生效方法:
    (1)重新启动shell进程;
    (2)使用source或.命令进程

bash中的算术运算:

+ - * / %(取余数)
实现算术运算:
    1,let var=算数运算表达式
    [root@localhost ~]# name1=3
    [root@localhost ~]# name2=4
    [root@localhost ~]# let name3=$name1+$name2
    [root@localhost ~]# echo $name3
    7

    2,(2)var=$[算术表达式]
    [root@localhost ~]# name4=$[$name1+$name2]
    [root@localhost ~]# echo $name4
    7

    3,(3)var=$(())
    [root@localhost ~]# name5=$(($name1+$name2))
    [root@localhost ~]# echo $name5
    7

    4,var=$(expr args1 arg2 arg3...)
    [root@localhost ~]# name6=$(expr $name1 + $name2)
    [root@localhost ~]# echo $name6
    7

    bash有内建的随机数生成器;$RANDOM
        [root@localhost ~]# echo $[RANDOM%60]
                    17
        [root@localhost ~]# echo $[RANDOM%60+1]取1到60之间

    增强型赋值:
    [root@localhost ~]# name=10
    [root@localhost ~]# 
    [root@localhost ~]# let name+=1
    [root@localhost ~]# echo $name
    11
    [root@localhost ~]# echo $name
    11
    [root@localhost ~]# let name+=1
    [root@localhost ~]# echo $name
    12

    如果后面数字不是1。
    [root@localhost ~]# let name+=2
    [root@localhost ~]# echo $name
    17

练习:

练习1,写一个脚本
计算/etc/passwd文件中的第10个用户和第20用户的ID之和
#!/bin/bash
userid1=$(head -n 10 /etc/passwd | tail -n 1 | cut -d: -f3)
userid2=$(head -n 20 /etc/passwd | tail -n 1 | cut -d: -f3)

useridsum=$[$userid1+$userid2]

echo "uid sum: $useridsum"

[root@localhost ~]# cat suansu.sh 
#!/bin/bash
#
user1=`head -n 10 /etc/passwd | tail -n 1 | cut -d':' -f3`
user2=`head -n 20 /etc/passwd | tail -n 1 | cut -d':' -f3`
#
userzongsu=$[$user1 + $user2]
#
echo "zong shu :$userzongsu"


[root@localhost ~]# chmod +x suansu.sh 
[root@localhost ~]# ./suansu.sh 
zong shu :509


练习2:写一个脚本
传递2个文件路径参数给脚本,计算这2个文件中所有空白行之和
#!/bin/bash

spaceline1=$(grep "^[[:space:]]*$" $1 | wc -l)
spaceline2=$(grep "^[[:space:]]*$" $2 | wc -l)

echo "The sum of space line: $[$spaceline1+$spaceline2]"

❤练习3:统计/etc, /var, /usr目录共有多少个一级子目录和文件;


变量取值的时候:
    var=$()和var=``没有区别

条件测试:

判断某需求是否满足,需要由测试机制来实现;
专用的测试表达式需要由测试命令辅助完成测试过程;

测试命令:
    test EXPRESSION
    [ EXPRESSION ] :命令
    [[ EXPRESSION ]]:关键字

    note:前后必须要有空格

bash的测试类型:
    数值测试
    -gt:是否大于
    -ge:是否大于等于
    -eq:是否等于
    -ne:是否不等于
    -lt:是否小于
    -le:是否小于等于

[root@localhost ~]# name1=3
[root@localhost ~]# name2=4
[root@localhost ~]# name3=3
[root@localhost ~]# test $name1 -gt $name2
[root@localhost ~]# echo $?
1
[root@localhost ~]# test $name1 -lt $name2
[root@localhost ~]# echo $?
0


字符串测试
    ==/=:字符串等值测试
    >:是否大于:
    <:是否小于:
    !=:是否不等于:
    =~:左侧字符串是否能够被右侧的PATTERN所匹配到:
    Note:次表达式一般用于[[  ]]中
    -z “STRING”:测试字符串是否为空,空则为真,不空则为假
    -n “STRING”:测试字符串是否为空,空则为假,不空则为真

[root@localhost ~]# [[ "$name1" = "$name2" ]]
[root@localhost ~]# echo $?
1
[root@localhost ~]# [[ "$name1" =~ ^o.* ]]
[root@localhost ~]# echo $?
1
[root@localhost ~]# [[ "$name1" =~ ^a.* ]]
[root@localhost ~]# echo $?
0
[root@localhost ~]# [[ -z "$name1" ]]
[root@localhost ~]# echo $?
1
[root@localhost ~]# [[ -n "$name1" ]]
[root@localhost ~]# echo $?
0


❤练习:写一个脚本
接受一个文件路径作为参数;
    如果参数个数小于1,则提示用户“至少应该给一个参数”,并立即退出;
    如果参数个数不小于1,则显示第一个参数所指向的文件中的空白行数;
[ $# -lt 1 ] && echo "At least one argument." && exit 1 


bash自定义退出状态码:
    exit [n]:自定义退出状态码
    注意:脚本一旦遇到exit命令。脚本会立即终止,终止退出状态取决于exit命令后面的数字:

    注意:如果未给脚本指定退出状态码,整个脚本的退出状态码取决于脚本中执行的最后一条命令的状态码:

特殊变量:

$#    表示变量的个数,常用于循环
$@    当前命令行所有参数。置于双引号中,表示个别参数
$*    当前命令行所有参数。置于双引号中,表示将命令行所有参数当初一个单独参数
$-(连字号)    在引用数给予Shell的选项
$?    表示上一个命令退出的状态
$$    表示当前进程编号
$0    表示当前程序名称
$!    表示最近一个后台命令的进程编号
$HOME    表示当前用户根目录
$IFS    表示内部的字段分隔符
$LANG    当前locale默认名称
$PATH    环境变量
$PPID    父进程编号
$PWD    当前工作目录



测试表达式的类别:
    数值比较
    字符串测试
    文件测试:
        存在性测试
            -a FILE
            -e FILE: 文件存在性测试,存在为真,否则为假;
    存在性及类别测试
        -b FILE:是否存在且为块设备文件;
        -c FILE:是否存在且为字符设备文件;
        -d FILE:是否存在且为目录文件;
        -f FILE:是否存在且为普通文件;
        -h FILE 或 -L FILE:存在且为符号链接文件;
        -p FILE:是否存在且为命名管道文件;
        -S FILE:是否存在且为套接字文件;
    文件权限测试:
        -r FILE:是否存在且可读
        -w FILE: 是否存在且可写
        -x FILE: 是否存在且可执行
    文件特殊权限测试:
        -g FILE:是否存在且拥有sgid权限;
        -u FILE:是否存在且拥有suid权限;
        -k FILE:是否存在且拥有sticky权限;
    文件大小测试:
        -s FILE: 是否存且非空;
    文件是否打开:
        -t fd: fd表示文件描述符是否已经打开且与某终端相关
        -N FILE:文件自动上一次被读取之后是否被修改过;
        -O FILE:当前有效用户是否为文件属主;
        -G FILE:当前有效用户是否为文件属组;

    双目测试:
        FILE1 -ef FILE2: FILE1与FILE2是否指向同一个设备上的相同inode

        FILE1 -nt FILE2: FILE1是否新于FILE2;
        FILE1 -ot FILE2: FILE1是否旧于FILE2;


组合测试条件:
    逻辑运算:
        第一种方式:
            COMMAND1 && COMMAND2
            COMMAND1 || COMMAND2
            ! COMMAND

            [ -e FILE ] && [ -r FILE ]

        第二种方式:
            EXPRESSION1 -a EXPRESSION2
            EXPRESSION1 -o EXPRESSION2
            ! EXPRESSION

必须使用测试命令进行;

# [ -z "$hostName" -o "$hostName"=="localhost.localdomain" ] && hostname www.magedu.com
# [ -f /bin/cat -a -x /bin/cat ] && cat /etc/fstab

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

(0)
wostopwostop
上一篇 2016-07-16 22:26
下一篇 2016-07-16 22:26

相关推荐

  • 6

    请详细总结vim编辑器的使用并完成以下练习题; 1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/ rc.sysinit文件中的以至少一个空白字符开头的行的行首加#; #   cp /etc/rc.d/rc.sysinit /tmp/ #   vim…

    Linux干货 2017-02-07
  • date 命令练习

    一、课外资料补充: 1.命令格式: date[参数]…[+格式] 2.命令功能: date可以用来显示或设定系统的日期与时间。 3.命令参数: 必要参数: %H小时(以00-23来表示)。 %I小时(以01-12来表示)。 %K小时(以0-23来表示)。 %l小时(以0-12来表示)。 %M分钟(以00-59来表示)。 %P AM或PM…

    Linux干货 2016-08-05
  • 文本三剑客之AWK

    简要概括AWK

    2018-05-27
  • 第十二周:httpd和lamp

    看了一下作业内容,发现所有的都在51cto上写过了。这里就不在做了。 毕竟当时几篇博客写下来,还是非常繁琐的,不想在写。 文档地址:RHEL6.8编译安装LAMP环境:httpd-2.4+mysql5.6+php5.5;基于LAMP环境部署WordPress: http://afterdawn.blog.51cto.com/7503144/1876171 配…

    Linux干货 2016-12-09
  • 吐血整理,国内常见的几种Linux认证

      因为在培训机构工作过,身边很多人咨询我Linux认证的事宜。现在国内各种培训机构的确很多,各家都说Linux认证多么多么重要,能获得多少薪水……这些听听就好了。 如果想在开源行业有所作为,必须要投入到实战中去。当你不是发烧友,不是开源社区骨干、不经常泡国外的坛子,那么实战是你唯一的成长路径。尤其是对基于Linux的开发、运维、纠错,都有上手经验…

    2018-06-01
  • 正则表达式详解

    正则表达式详解

    2017-09-20

评论列表(1条)

  • 马哥教育
    马哥教育 2016-07-17 20:24

    写的很好,排版也很漂亮,加油