精华内容
下载资源
问答
  • 高级shell编程

    2018-05-04 11:35:57
    linux 高级shell 编程,学习linux的运维和开发都可以看看参考。
  • shell 基础和高级shell编程
  • 高级shell编程指南

    2012-06-21 20:27:12
    高级shell编程指南
  • 第五部分 高级shell编程技巧 第25章 深入讨论 第26章 shell 工 具 第27章 几个脚本例子 第28章 运行级别脚本 第29章 cgi 脚 本 附录 常用shell命令
  • 高级shell脚本编程指南.zip ,tuijianxuexi.
  • 高级shell 编程

    2010-03-31 14:02:05
    高级shell 编程,chm版,超实用的一本书
  • 高级SHELL编程指南

    2010-04-23 14:04:13
    高级SHELL编程指南 SHELL编程 shell
  • 高级shell编程技巧

    2008-01-12 22:02:54
    高级shell编程技巧
  • HBase的高级shell管理命令

    千次阅读 多人点赞 2019-12-12 19:55:52
    继上一篇《HBase常用的shell操作》博客之后,本篇小菌将为大家带来的是关于HBase的高级shell管理命令。          status 例如: 显示服务器状态 hbase(main):058:0> st...

            继上一篇《HBase常用的shell操作》博客之后,本篇小菌将为大家带来的是关于HBase的高级shell管理命令。
            

    status

    例如: 显示服务器状态

    hbase(main):058:0> status 'node01'
    

    在这里插入图片描述
    翻译过来就是说:
    一台活动主机,2个备份主机,3个服务器,0死机,平均负载1.333
            

    whoami

    显示HBase当前用户
    例如:

    whoami
    

    在这里插入图片描述

    list

    显示当前所有的表

    list
    

    在这里插入图片描述

    count

    统计指定表的记录数
    例如:

    count
    

    在这里插入图片描述

    describe

    展示表结构信息

    describe 'user'
    

    在这里插入图片描述

    exists

    检查表是否存在,适用于表量特别多的情况

    exists 'user'
    

    在这里插入图片描述

    is_enabled、is_disabled

    检查表是否启用或禁用

    is_enabled 'users'
    

    在这里插入图片描述

    is_disabled 'users'
    

    在这里插入图片描述

    alter

    该命令可以改变表和列族的模式,例如:

    为当前表增加列族:
    hbase> alter 'user', NAME => 'CF2', VERSIONS => 2
    为当前表删除列族:
    hbase(main):002:0>  alter 'user', 'delete' => 'CF2'
    

            

    disable/enable

    禁用一张表/启用一张表
            

    drop

    删除一张表,记得在删除表之前必须先禁用
            

    truncate

    清空表的数据
            
            
            
            到这里本次的分享就结束了,受益的小伙伴或对大数据技术感兴趣的朋友记得关注小菌哟(^U^)ノ~YO
            
            
            
    在这里插入图片描述

    展开全文
  • Hbase--高级shell的使用

    2019-10-31 21:29:21
    Hbase–高级shell的使用 文章目录Hbase--高级shell的使用1、 BLOOMFILTER2、 VERSIONS3、 COMPRESSION4、 TTL5、 alter6、 describe/desc7、 disable_all/enable_all/drop_all (禁用/启用/删除所有)8、 hbase 预...

    Hbase–高级shell的使用

    1、 BLOOMFILTER

    是否使用布隆过虑及使用何种方式,布隆过滤可以每列族单独启用

    使用 HColumnDescriptor.setBloomFilterType(NONE | ROW | ROWCOL) 对列族单独启用布隆

    • 默认是 NONE ,不采用BLOOMFILTER
    • Default = ROW 对行进行布隆过滤
    • 对 ROW,行键的哈希在每次插入行时将被添加到布隆
    • 对 ROWCOL,行键 + 列族 + 列族修饰的哈希将在每次插入行时添加到布隆

    使用方法:

    create 'table',{BLOOMFILTER =>'ROW'}  
    

    作用:用布隆过滤可以节省读磁盘过程,可以有助于降低读取延迟

    2、 VERSIONS

    默认是 1 这个参数的意思是数据保留 1 个 版本,如果我们认为我们的数据没有这么大 的必要保留这么多,随时都在更新,而老版本的数据对我们毫无价值,那将此参数设为 1 能 节约 2/3 的空间

    使用方法:

    create 'table',{VERSIONS=>'2'} 
    

    附:MIN_VERSIONS => '0’是说在 compact 操作执行之后,至少要保留的版本

    3、 COMPRESSION

    默认值是 NONE 即不使用压缩,这个参数意思是该列族是否采用压缩,采用什么压缩算

    法,使用方法:

    create 'table',{NAME=>'info',COMPRESSION=>'SNAPPY'} 
    

    建议采用 SNAPPY 压缩算 法 ,HBase 中,在 Snappy 发布之前(Google 2011 年对外发布 Snappy),采用的 LZO 算法,

    目标是达到尽可能快的压缩和解压速度,同时减少对 CPU 的消耗; 在 Snappy 发布之后,建议采用 Snappy 算法(参考《HBase: The Definitive Guide》),具体 可以根据实际情况对 LZO 和 Snappy 做过更详细的对比测试后再做选择

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pOZmVOhs-1572528532855)(D:\CSDN图片\压缩算法.png)]

    如果建表之初没有压缩,后来想要加入压缩算法,可以通过 alter 修改 schema

    4、 TTL

    默认是 2147483647 即:Integer.MAX_VALUE 值大概是 68 年 ,这个参数是说明该列族数据的存活时间,单位是 s ,这个参数可以根据具体的需求对数据设定存活时间,超过存过时间的数据将在表中不在 显示,待下次 major compact 的时候再彻底删除数据

    注意:

    TTL 设定之后 ,MIN_VERSIONS=>‘0’ 这样设置之后,TTL 时间戳过期后,将全部 彻底删除该 family 下所有的数据,如果MIN_VERSIONS 不等于 0 那将保留最新的 MIN_VERSIONS 个版本的数据,其它的全部删除,比如 MIN_VERSIONS=>‘1’ 届时将保留一个 最新版本的数据,其它版本的数据将不再保存。

    5、 alter

    使用方法:

    如修改压缩算法

    disable 'table' 
    
    alter 'table',{NAME=>'info',COMPRESSION=>'snappy'}  
    
    enable 'table' 
    

    但是需要执行 major_compact ‘table’ 命令之后 才会做实际的操作。

    6、 describe/desc

    这个命令查看了 create table 的各项参数或者是默认值。

    使用方式:

    describe 'user_info' 
    

    7、 disable_all/enable_all/drop_all (禁用/启用/删除所有)

    使用方式:一般配合模糊查询使用

    disable_all 'toplist.*'
    

    drop_all,enable_all和 disable_all 的使用方式是一样的

    8、 hbase 预分区

    默认情况下,在创建 HBase 表的时候会自动创建一个 region 分区,当导入数据的时候, 所有的 HBase 客户端都向这一个 region 写数据,直到这个 region 足够大了才进行切分,这样会导致这个region压力过大。一 种可以加快批量写入速度的方法是通过预先创建一些空的 regions,这样当数据写入 HBase 时,会按照 region 分区情况,在集群内做数据的负载均衡。

    命令方式
    create "test_split","info01","info02",SPLITS => ['rk10000','rk20000','rk30000'] 
    

    SPLITS :制定分区的分隔点 ,rk的分隔点
    region0 <=rk10000
    region1 rk10000-rk20000
    region2 rk20000-rk30000
    region3 >=rk30000

    API方式
    byte[][] splits={"rk10000".getBytes(),"rk20000".getBytes()};
    admin.createTable(htd, splits);
    或者
    admin.createTable(htd,startkey,endkey,splitNum);
    admin.createTable(htd, splits);
    
    UI上查看结果

    在这里插入图片描述

    这样就可以将表预先分为 4个区,减少数据达到 storefile 大小的时候自动分区的时间 消耗,并且还有以一个优势,就是合理设计 rowkey 能让各个 region 的并发请求平均分配(趋 于均匀) 使 IO 效率达到最高,但是预分区需要将 filesize 设置一个较大的值,设置参数 hbase.hregion.max.filesize 这个值默认是 10G 也就是说单个 region 默认大小是 10G

    这个参数的默认值在 0.90 到 0.92 到 0.94.3 各版本的变化:256M–1G–10G

    但是如果 MapReduce Input 类型为 TableInputFormat 使用 hbase 作为输入的时候,就要注意 了,每个 region 一个 map,如果数据小于 10G 那只会启用一个 map 造成很大的资源浪费, 这时候可以考虑适当调小该参数的值,或者采用预分配 region 的方式,并将检测如果达到 这个值,再手动分配 region

    展开全文
  • 适合想要提升自己shell能力的人,里面是shell 核心知识详解,shell高级应用
  • shell基础 (pdf) txt版 ,适合于初级和高级shell编程者
  • 高级shell命令

    2018-05-07 11:52:20
    高级命令 用户 /etc/passwd并不是一个用来保存密码的文件,而是用来保存用户信息的文件。保存密码的是/etc/shadow。 /etc/passwd的字段包括:登录用户名、用户密码、用户UID、用户的组ID、备注、HOME目录的位置...

    高级命令

    用户

    /etc/passwd并不是一个用来保存密码的文件,而是用来保存用户信息的文件。保存密码的是/etc/shadow
    /etc/passwd的字段包括:登录用户名、用户密码、用户UID、用户的组ID、备注、HOME目录的位置和默认shell。
    千万不要直接修改/etc/passwd文件,改崩了可能连root用户都登不了系统。要使用专用的命令来更改用户设置。

    useradd: 创建一个新用户

    useradd [options]login: 以options中的设置创建新用户login

    useradd -D: 显示默认设置的内容

    useradd -D [options]: 修改默认设置的内容

    参数 描述
    -c comment 给新用户添加备注
    -dhome-dir 指定主目录的名字(如果不想用登录名作为主目录名的话)
    -eexpire-date 用YYYY-MM-DD的格式指定一个账户过期的日期
    -ginitial-group 指定用户登录组的gid或组名
    -m 创建用户的主目录
    -M 不创建用户的主目录
    -p 指定账户默认的密码
    -sshell 指定默认的登录shell
    -uuid 指定uid

    adduser: 交互式添加用户
    useradd好用,不容易出问题。

    userdel: 删除用户
    默认情况下,userdel只会删除/etc/passwd文件中的用户信息,而不会删除系统中属于该账户的任何文件。
    使用-ruserdel会删除用户的HOME目录以及邮件目录

    usermod: 修改用户账户的字段。

    参数 描述
    -ccomment 修改备注字段
    -e date 修改过期时间
    -g group 修改登录组
    -l name 修改登录名
    -L 锁定用户
    -U 解锁
    -p passwd 修改账户的密码

    passwd: 修改密码

    chpasswd: 批量修改密码

    chsh: 修改用户登录shell

    /etc/group文件中保存了每个组的信息,包括:组名、组密码、组ID和属于该组的用户列表。
    组密码用于使非组内成员临时成为该组成员。用户列表中不一定列出了所有组内成员。当一个用户在/etc/passwd文件中指定某个组作为默认组是,该用户账户不会再出现在/etc/group中。
    /etc/passwd,不要直接用编辑器改这个文件。

    groupadd: 创建新组

    groupmod: 修改已有组的字段

    注意:把一个用户添加到一个组中使用usermod -aGgroups...命令,没有对应的groupmod命令。

    文件权限

    ls -l输出的结果的第一个字段就是描述文件和目录权限的编码。
    - -代表文件
    - d代表目录
    - l代表链接
    - c代表字符形设备
    - b代表块设备
    - n代表网络设备
    之后三组三字符编码分别对应文件的属主、属组和其他用户的访问权限
    - r代表可读
    - w代表可写
    - x代表可执行。对于文件夹,可读意味着可以读取文件目录项,即可以知道该目录下的内容;可执行意味着,可以访问目录下的文件。

    umask: 显示或设置新建文件和目录的默认权限屏蔽字

    每组rwx可以看成一个八进制数字。普通文件的自然权限是6,即可读可写不可执行;目录的自然权限是7,可读可写可执行。权限屏蔽字就是创建的文件需要屏蔽的权限。
    比如,mask为002时,新建的文件其他用户没有写权限。

    chmod: 改变文件的权限
    - chmodoptions mode file
    mode参数可以使用八进制值或者符号模式进行描述。
    符号模式:[ugoa...][+-=][rwxXstugo...]。第一组字符定义了权限作用的对象:u代表用户、g代表组、o代表其他、a代表全部;下一步表示你是想要在现有的权限上增加权限(+),还是移除权限(-),或是将权限设置成后面的值(=);第三个符号代表作用到设置上的权限:
    - X: 如果对象是目录或者它已有执行权限,赋予执行权限。
    - s: 运行时重新设置UID或GID
    - t: 保留文件或目录
    - u: 将权限设置为跟属主一样
    - g: 将权限设置为跟属组一样
    - o: 将权限设置为更其他用户一样

    chown: 改变文件的属主
    chownoptions owner[:[group]] file
    可以用登录名或者UID来指定文件的属主。

    文件系统

    文件系统建立在磁盘分区上,一个物理存储设备可以划分成一个或者多个分区,分区可视为存储子设备。
    存储设备首部建有分区表,用来描述该存储器上的分区划分。

    fdisk: 用来管理存储设备上的分区

    交互命令:

    • n: 新建分区
    • p: 列出分区表
    • w: 将改动写入磁盘
    • d: 删除一个分区

    mkfs: 在分区上创建文件系统, 创建文件系统命令有多种:mkfs.e2fsmkfs.ext2mkfs.vfat等等。

    软件管理

    apt:

    dpkg:

    作业控制

    在命令后面加&,把命令放到后台作为一个独立的进程运行。shell会显示分配的作业号和进程号。当进程在后台运行时,它仍然使用终端的显示器来显示STDOUT和STDERR的信息。在终端会话中使用后台进程时,每一个后台进程都和终端会话连接在一起。如果终端会话退出,那么后台进程也会退出。

    nohup command&

    如果想要在终端会话中启动脚本,然后让脚本一直在后台模式运行到结束,即使推出了终端,这可以通过nohup命令来实现。nohup命令运行了另外一个命令来阻断所有发送给该进程的SIGHUP信号。这会在退出终端会话时阻止进程退出。由于nohup命令会解除终端与进程的关联,进程也不再同STDOUTSTDERR联系在一起,为了保存该命令产生的输出,nohup会自动将STDOUTSTDERR的信息重定向到一个名为nohup.out的文件中。

    jobs命令可以查看后台的作业。
    bg job-number命令可以把暂停的作业放到后台运行
    fg job-number命令可以把暂停的作业放到前台运行

    nice: 设置命令启动时的优先级

    • nice [option] [command [arg]...]

    优先级取值从-2019,默认情况下,bash shell以优先级0来启动进程。设置正优先级需要管理员权限。

    • -n N: 执行优先级

    renice: 改变正在运行的进程的优先级。

    • renice [-n] priority [-g|-p|-u] identifier...

    和nice命令类似,降低优先级不需要管理员权限,提高优先级需要管理员权限。

    • -n prior: 指定优先级
    • -g: 跟着的参数为组id,改变该组进程的优先级
    • -p: 跟着的参数为Pid,改变该进程的优先级
    • -u: 跟着的参数为uid,改变该用户进程的优先级

    ·at: 计划执行作业

    • at [-f filename] time

    at命令允许指定Linux系统何时运行脚本。at命令会将作业提交到队列中,指定shell何时运行该作业。at的守护进程atd会以后台模式运行,检查作业队列来运行作业。

    • -f filename: 指定作业的命令脚本。缺省时从stdin输入。
    • time: 指定何时运行作业。可以使用多种格式:
      • HH:MM 每天的HH时MM分运行
      • midnight,noon,teatime(4pm)
      • month-name day 指定某天
      • MM/DD/[CC]YY
        • count-time-units
          当作业运行时,显示器并不会关联到该作业。linux会将提交该作业的用户的电子邮件地址作为STDOUT和STDERR。因此使用at命令时最好以用重定向输出到文件中。

    atq: 列出系统中等待的作业

    atrm: 删除等待队列中的作业

    展开全文
  • 高级shell 脚本

    2019-04-04 17:26:00
    1.函数 函数是一个脚本代码块,你可以为其命名并在...本节将会介绍如何在shell脚本中创建和使用函数 创建函数 function name { commands } name() { commands } 使用函数 [root...

    1.函数

    函数是一个脚本代码块,你可以为其命名并在代码中任何位置重用。要在脚本中使用该代码块时,只要使用所起的函数名就行了(这个过程称为调用函数)。本节将会介绍如何在shell脚本中创建和使用函数

     创建函数

    function name { 
     commands 
    }

     

    name() { 
    commands 
    }

     

     

    使用函数

    [root@localhost advanced_shell_script]# cat test1.sh 
    #!/bin/bash
    #using a function in a script
    
    
    function func1 {
    
        echo "This is an example of a function"
    
    }
    
    
    count=1
    
    while [ $count -le 3 ] ;do
        func1
        count=$[ $count + 1 ]
    done
    
    echo "This is the end of the loop"
    func1
    echo "This is script end"
    
    [root@localhost advanced_shell_script]# ./test1.sh
    This is an example of a function
    This is an example of a function
    This is an example of a function
    This is the end of the loop
    This is an example of a function
    This is script end
    [root@localhost advanced_shell_script]# 

     

    使用return  返回 函数

    [root@localhost advanced_shell_script]# cat test2.sh 
    #!/bin/bash
    
    #using the return command in a function
    
    function db1 {
     read -p "Enter a value:" value
    echo "doubling the value"
    return $[ $value * 2  ]
    
    
    
    }
    db1
    echo "The new value $?"
    
    [root@localhost advanced_shell_script]# ./test2.sh 
    Enter a value:2
    doubling the value
    The new value 4 
    [root@localhost advanced_shell_script]# ./test2.sh       #注意$? 返回函数值必须小于256 ,因此需要另外一种方法
    Enter a value:200
    doubling the value
    The new value 144
    [root@localhost advanced_shell_script]# 

     

    另外一种方法

    [root@localhost advanced_shell_script]# cat test3.sh 
    #!/bin/bash
    
    #using the return command in a function
    
    function db1 {
     read -p "Enter a value:" value
    #echo "doubling the value"
    echo $[ $value * 2  ]               #新函数会用echo语句来显示计算的结果。该脚本会获取dbl函数的输出,而不是查看退出状态码
    }
    value1=$(db1)
    echo "The new value $value1"
    
    [root@localhost advanced_shell_script]# ./test3.sh 
    Enter a value:200
    The new value 400
    [root@localhost advanced_shell_script]# 

     传递参数:

    [root@localhost advanced_shell_script]# cat test4.sh 
    #!/bin/bash
    #passing parameters to a function
    
    function addem {
    if [ $# -eq 0 ] || [ $# -gt 2  ];then
        echo -1
    elif [ $# -eq 1 ];then
        echo $[ $1 *  $1 ]
    else 
        echo $[ $1 + $2 ]
    
    
    fi
    }
    echo -n "Adding 20 and 30:"
    value=$(addem 20 30)
    echo $value
    
    echo -n "30 *:"
    value=$( addem 30)
    echo $value
    
    echo -n "10 20 30:"
    value=$(addem 10 20 30)
    echo $value
    
    [root@localhost advanced_shell_script]# ./test4.sh 
    Adding 20 and 30:50
    30 *:900
    10 20 30:-1
    [root@localhost advanced_shell_script]# 

     

     命令行传递参数

    [root@localhost advanced_shell_script]# cat test5.sh 
    #/bin/bash
    #trying to access script parameters inside a function
    
    function func1 {
        echo $[ $1 * $2 ]
    
    
    }
    
    if [ $# -eq 2 ];then
    
        value=$(func1 $1 $2)
        echo "The result is $value"
    else
        echo "Usage:badtest1 a b"
    fi
    [root@localhost advanced_shell_script]# ./test5.sh 
    Usage:badtest1 a b
    [root@localhost advanced_shell_script]# ./test5.sh 2 3
    The result is 6
    [root@localhost advanced_shell_script]# 

     

     

     在函数中处理变量

    全局变量和局部变量

    1. 全局变量
    全局变量是在shell脚本中任何地方都有效的变量。如果你在脚本的主体部分定义了一个全局变量,那么可以在函数内读取它的值。类似地,如果你在函数内定义了一个全局变量,可以在脚本的主体部分读取它的值。

     

     

    13 2. 局部变量
    无需在函数中使用全局变量,函数内部使用的任何变量都可以被声明成局部变量。要实现这一点,只要在变量声明的前面加上local关键字就可以了。

     

     

    [root@localhost advanced_shell_script]# cat test6.sh 
    #!/bin/bash
    #demonstrating the local keyword
    function func1 {
    
        local test1=$[ $test2 * 2  ]
    
        test3=$[ test2 * 2 ]
    
    }
    test3=100
    test1=10
    test2=5
    func1
    echo "$test1 $test2 $test3 "
    
    [root@localhost advanced_shell_script]# vim test6.sh 
    [root@localhost advanced_shell_script]# ./test6.sh     #局部变量的值  test1 在函数执行后没有被修改,test3 的值在函数执行后,被修改为函数执行的结果
    1223340 5 10 
    [root@localhost advanced_shell_script]# 

     

     

     向函数传递数组变量的注意事项

    [root@localhost advanced_shell_script]# cat test8.sh 
    #!/bin/bash 
    # array variable to function test 
    function test1 {                  #在向函数传递数组变量的时候,需要将数据变量当做一个整体进行传递,通过$@ 方式 
                        #$@ 将给定的多个参数定义为同一字符串的多个单独的单词,类似  "A" "B"  "C" local newarray newarray
    =($(echo $@)) echo "The new array value is: ${newarray[*]}" } function test2 { #在向函数传递数组变量时,如果使用 $1 参数,会识别为数组变量的第一个参数。无法完整的传递整个参数。默认不会将传递给函数的数组变量看成一个参数 local newarray newarray=$1 echo "The test2 function valueis: ${newarray[*]}" } myarray=(1 2 3 4 5) echo "The original array is ${myarray[*]}" test1 ${myarray[*]} test2 ${myarray[*]} [root@localhost advanced_shell_script]# ./test8.sh The original array is 1 2 3 4 5 The new array value is: 1 2 3 4 5 The test2 function valueis: 1 [root@localhost advanced_shell_script]#

     

    函数递归的使用,使用bash -x 跟踪递归的处理步骤很有效

    root@localhost advanced_shell_script]# cat test11.sh 
    #!/bin/bash
    #using recursion
    
    function factorial {
    
        if [ $1  -eq 1 ];then
        
        echo 1
        else
        local temp=$[ $1 - 1 ]
        local result=`factorial $temp`
        #return $1
        echo $[ $result * $1 ]
        fi
    }
    
    value=5
    result=$(factorial $value)
    echo "$result"
    [root@localhost advanced_shell_script]# bash -x test11.sh 
    + value=5
    ++ factorial 5
    ++ '[' 5 -eq 1 ']'
    ++ local temp=4
    +++ factorial 4
    +++ '[' 4 -eq 1 ']'
    +++ local temp=3
    ++++ factorial 3
    ++++ '[' 3 -eq 1 ']'
    ++++ local temp=2
    +++++ factorial 2
    +++++ '[' 2 -eq 1 ']'
    +++++ local temp=1
    ++++++ factorial 1
    ++++++ '[' 1 -eq 1 ']'
    ++++++ echo 1
    +++++ local result=1
    +++++ echo 2
    ++++ local result=2
    ++++ echo 6
    +++ local result=6
    +++ echo 24
    ++ local result=24
    ++ echo 120
    + result=120
    + echo 120
    120
    [root@localhost advanced_shell_script]# 

     

    创建库的办法

    [root@localhost advanced_shell_script]# cat myfuncs   #创建的库文件需要有执行权限
    #my script functions
    
    function addem {
    
        echo $[ $1 + $2 ]
    
    }
    
    function multem {
    
        echo $[ $1 * $2 ]
    }
    
    function divem {
    
        if [ $2 -ne 0 ];then
        
            echo $[ $1 / $2 ]
            
        else
        echo 1
        fi
    }
    
    
    [root@localhost advanced_shell_script]# cat test12.sh 
    #!/bin/bash 
    # using functions defined in a library file 
    source ./myfuncs   #两种方式调用库文件 ,source 和 ..  ,这是让库文件在当前shell 调用。如果使用 ./mufuncs 相当于在子shell 调用了。会找不到命令
    # ../myfuncs
    value1
    =10 value2=5 result1=$(addem $value1 $value2) result2=$(multem $value1 $value2) result3=$(divem $value1 $value2) echo "The result of adding them is: $result1" echo "The result of multiplying them is: $result2" echo "The result of dividing them is: $result3" # [root@localhost advanced_shell_script]# ./test12.sh The result of adding them is: 15 The result of multiplying them is: 50 The result of dividing them is: 2 [root@localhost advanced_shell_script]#

     

     

    在命令行创建函数:

    [root@localhost advanced_shell_script]# function funcs {  #当在命令行上定义函数时,你必须记得在每个命令后面加个分号,这样shell就能知道在哪里是命令的起止了
    > echo $[ $1 + $2  ];}
    [root@localhost advanced_shell_script]# funcs 1 2
    3
    [root@localhost advanced_shell_script]# 

     

     

    在 .bashrc 中定义函数

    [root@localhost ~]# cat /root/.bashrc     # .bashrc 是函数的最佳定义位置
    # .bashrc
    
    # User specific aliases and functions
    
    alias rm='rm -i'
    alias cp='cp -i'
    alias mv='mv -i'
    
    # Source global definitions
    if [ -f /etc/bashrc ]; then
        . /etc/bashrc
    fi
    
    function add {
        echo $[ $1 + $2 ]
    
    }
    [root@localhost ~]# 

     

     

    在script 中使用在.bashrc 中定义的函数

    root@localhost advanced_shell_script]# cat test13.sh 
    #!/bin/bash
    
    source /root/.bashrc    #通过source 命令将函数调用进来,否则命令找不到
    
    result=$(add 2 3) 
    echo "$result"
    
    [root@localhost advanced_shell_script]# 

     

    转载于:https://www.cnblogs.com/zy09/p/10656083.html

    展开全文
  • 高级Shell脚本编程.zip

    2019-05-14 22:42:24
    这是shell中文chm文档,可供运维人员以及相关人员下载参考使用,详细的描述了shell开发中使用的各种指令和函数。
  • 高级shell脚本编程

    2012-02-23 09:50:03
    这本书详细的介绍shell的编程,如果想学好shell脚本这本书是必备的
  • 高级shell编程讲解

    千次阅读 2017-02-08 10:52:21
    Shell高级编程学习笔记(基础篇)   目录 1.shell脚本的执行方法 2.shell的变量类型 3.shell特殊变量 4.变量子串的常用操作 5.批量修改文件名实践 6.变量替换 7.在shell中计算字符串长度的方法 8.变量的数值...
  • 以下为阅读《Linux命令行与shell脚本编程大全 第3版》的读书笔记,为了方便记录,...《Linux命令行与shell脚本编程大全 第3版》高级Shell脚本编程---11 转载于:https://www.cnblogs.com/guochaoxxl/p/7894821.html...
  • 高级shell编程指南下

    2010-07-30 18:06:08
    shell编程指南shell编程指南shell编程指南
  • 高级shell 编程指南上

    2010-07-30 17:52:32
    shell编程指南shell编程指南shell编程指南

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,523
精华内容 2,609
关键字:

高级shell