复习二

复习二

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
下一篇 2016-07-16

相关推荐

  • 干货 | 20 行 Python 代码创建可视化地图

    当我开始建造Vincent时, 我的一个目的就是使得地图的建造尽可能合理化. 有一些很棒的python地图库-参见Basemap 和 Kartograph能让地图更有意思. 我强烈推荐这两个工具, 因为他们都很好用而且很强大. 我想有更简单一些的工具,能依靠Vega的力量并且允许简单的语法点到geoJSON文件,详细描述一个投影和大小/比列,最后输出地图. …

    2017-09-08
  • llinux常用命令及bash基本特性

    一、常用的文件和目录管理命令 1. pwd命令:用来显示当前的工作目录 语法格式:直接输入pwd回车显示当前的工作目录 示例:用pwd命令显示当前的工作目录 [root@suyiwen ~]# pwd /root 2. mkdir命令:用来创建目录文件 语法格式:mkdir [OPTION]… DIRECTORY…常用option: -m,用来指定目录的权限…

    Linux干货 2018-03-11
  • Linux笔记 – RPM及YUM软件包的管理与使用 2(YUM工具的使用方法)

    ◆ 软件包的管理- YUMYUM(Yellowdog Updater Modified)工具与APT(debain ubuntu等)工具一样,在解决软件依赖关系的同时可以下载、安装、升级、卸载等功能的重要工具。YUM的相关设定在 /etc/yum.conf 文件中有详细的描述。为了设置软件包的软件源信息,需要修改/etc/yum.conf 文件或在 /etc…

    2018-05-08
  • Linux中账号管理之权限管理(下)

    linux中的账号管理我们在前面两张已经介绍了一些用户和组的相关概念,常用的配置文件,命令的使用。现在我们来看看账号管理中最傲娇的部分就是我们的权限管理。 一、简单介绍权限的概念 以install.log这个文件为例,查看install.log的元数据,从下图可以看出,每个文件或者目录都有它的所属的主和所属组,最左边显示不仅有它所属类型,还有它的读取写入执行…

    Linux干货 2016-08-08
  • 进入各种模式操作 在centos虚拟机上实现内外网的连接

      进入单用户模式; 重启后在下面界面按任意键 进入此界面后按“ a ” 在下面界面 输入  1   进入单用户模式  1之前有空格     进入救援模式 1 重启后将鼠标键入界面里,在第一个界面的进度条没走完之前按一次ESC键即可进入(只能按一次ESC) 2 选择上图中的第三项光盘引导启动,之后选择下图的第三项救援模式启动。 &nbsp…

    2018-05-09
  • nginx实现代理服务器功能

    nginx实现代理服务器功能1: #环境: 172.16.253.223 #CentOS7.3,安装nginx作为代理服务器 172.16.253.224 #CentOS7.3,安装httpd作为服务器 172.16.253.188 #CentOS6.8,咱庄httpd作为图片服务器 #223主机: yum install nginx vim /etc/ng…

    Linux干货 2017-06-28

评论列表(1条)

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

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