bash基本特性4

bash的基础特性
变量类型:
        数据存储格式、存储空间大小、参与运算种类;

字符型
        数值型:
            整型
            浮点型

强类型:定义变量时必须指定类型、参与运算必须符合类型要求;调用未声明变量会产生错误;
        弱类型:无须指定类型,默认均为字符型;参与运算会自动进行隐式类型转换;变量无须事先定义可直接调用;
            bash

bash中的变量的种类:
            根据变量的生效范围等标准:
                本地变量:生效范围为当前shell进程;对当前shell之外的其它shell进程,包括当前shell的子shell进程均无效;
                环境变量:生效范围为当前shell进程及其子进程;
                局部变量:生效范围为当前shell进程中某代码片断(通常指函数);
                位置变量:$1, $2, ...来表示,用于让脚本在脚本代码中调用通过命令行传递给它的参数;
                特殊变量:$?,命令执行状态  成功或者失败
                $0,
                $*,
                [email protected],
                $#

[[email protected] ~]# a=3
[[email protected] ~]# b=5
[[email protected] ~]# echo $a+$b
3+5
[[email protected] shell]# vim aaaa.sh
[[email protected] shell]# chmod u+x aaaa.sh 
[[email protected] shell]# sh aaaa.sh  xiaoming   2222222
xiaoming
2222222
[[email protected] shell]# cat aaaa.sh 
#!/bin/bash
echo $1
echo $2
[[email protected] shell]#

本地变量:
                变量赋值:name=‘value‘
                    可以使用引用:
                        value:
                            (1) 可以是直接字串; name="username"
                            (2) 变量引用:name="$username"
                            (3) 命令引用:name=`COMMAND`, name=$(COMMAND)
                变量引用:${name}, $name

[[email protected] shell]# animal=pig
[[email protected] shell]# echo "There are some $animals ..."
There are some  ...
[[email protected] shell]# echo "There are some ${animal}s ..."
There are some pigs ...
[[email protected] shell]#

"":弱引用,其中的变量引用会被替换为变量值;
                    ‘‘:强引用,其中的变量引用不会被替换为变量值,而保持原字符串;
                显示已定义的所有变量
                    set
                销毁变量:
                    unset name

环境变量:
                变量声明、赋值:
                    export name=VALUE
                    declare -x name=VALUE
                变量引用:$name, ${name}
                显示所有环境变量:
                    export
                    env
                    printenv
                销毁:
                    unset name

bash有许多内建的环境变量:PATH, SHELL, UID, HISTSIZE, HOME, PWD, OLD, HISTFILE, PS1
                !!!!!避免对内见变量的重新设置值

变量命名法则:
                1、不能使程序中的保留字:例如if, for;
                2、只能使用数字、字母及下划线,且不能以数字开头;
                3、见名知义,

只读变量:
                readonly name
                declare -r name

位置变量:
                在脚本代码中调用通过命令行传递给脚本的参数;
                    $1, $2, ...:对应调用第1、第2等参数;

shift [n]

$0: 命令本身;

$*: 传递给脚本的所有参数;
                    [email protected]: 传递给脚本的所有参数;
                    $#: 传递给脚本的参数的个数;

[[email protected] shell]# cat s.sh 
#!/bin/bash
#执行命令的shell
echo $0
#第一个参数
echo $1
#第二个参数
echo $2
echo "$*      :    $*"
echo "\[email protected]      :    [email protected]"
echo "\$#      :    $#"
[[email protected] shell]# sh s.sh  a b 
s.sh
a
b
a b      :    a b
[email protected]      :    a b
$#      :    2

示例:判断给出的文件的行数
                    #!/bin/bash
                    linecount="$(wc -l $1| cut -d‘ ‘ -f1)"
                    echo "$1 has $linecount lines."

bash的配置文件:

按生效范围划分,存在两类:
            全局配置:
                /etc/profile
                    /etc/profile.d/*.sh
                /etc/bashrc
            个人配置:
                ~/.bash_profile
                ~/.bashrc

按功能划分,存在两类:
            profile类:为交互式登录的shell提供配置
                全局:/etc/profile, /etc/profile.d/*.sh
                个人:~/.bash_profile
                功用:
                    (1) 用于定义环境变量;
                    (2) 运行命令或脚本;

bashrc类:为非交互式登录的shell提供配置
                全局:/etc/bashrc
                个人:~/.bashrc

功用:
                    (1) 定义命令别名;
                    (2) 定义本地变量;

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

[[email protected] ~]# cat /etc/profile.d/welcome.sh
#!/bin/bash
echo " welcome $UID, your home is $HOME. note....."
[[email protected] ~]# su - user1
 welcome 500, your home is /home/user1. note.....
[[email protected] ~]# export PATH="$PATH:/usr/local/aaaa"
[[email protected] ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/aaaa
[[email protected] ~]# declare -x PATH="/usr/local/bbb:$PATH"
[[email protected] ~]# echo $PATH
/usr/local/bbb:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/aaaa
[[email protected] ~]#

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

问题:
            1、定义对所有用户都生效的别名?
            2、让用户的PATH环境变量的值多出一个路径,例如多如/usr/local/apache2/bin
                管理员?
                所有?

bash中的算术运算
        +, -, *, /, %, **

实现算术运算:
            (1) let var=算术表达式
            (2) var=$[算术表达式]
            (3) var=$((算术表达式))
            (4) var=$(expr arg1 arg2 arg3 ...)

乘法符号有些场景中需要转义;

bash有内建的随机数生成器:$RANDOM

增强型赋值:
            +=, -=, *=, /=, %=

let varOPERvalue
                例如:let count+=1

自增,自减:
            let var+=1
                let var++

let var-=1
                let var--

[[email protected] ~]# num1=10
[[email protected] ~]# num2=10
[[email protected] ~]# let num3=$num1+$num2
[[email protected] ~]# echo $num3
20
[[email protected] ~]# echo $[$num1+$num2]
20
[[email protected] ~]# echo $(($num1+$num2))
20
[[email protected] ~]# num12=$(expr $num1 \* $num2)
[[email protected] ~]# echo $num12
100
[[email protected] ~]# echo $[$num1*$num2]
100

练习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"

练习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目录共有多少个一级子目录和文件;

条件测试:
        判断某需求是否满足,需要由测试机制来实现;

Note: 专用的测试表达式需要由测试命令辅助完成测试过程;

测试命令:
            test EXPRESSION
            [ EXPRESSION ]
            [[ EXPRESSION ]]

Note: EXPRESSION前后必须有空白字符;

bash的测试类型:
            数值测试:
                -gt: 是否大于;
                -ge: 是否大于等于;
                -eq: 是否等于;
                -ne: 是否不等于;
                -lt: 是否小于;
                -le: 是否小于等于;
            字符串测试:
                ==:是否等于;
                >: 是否大于;
                <: 是否小于;
                !=: 是否不等于;
                =~: 左侧字符串是否能够被右侧的PATTERN所匹配;
                    Note: 此表达式一般用于[[  ]]中;
                -z "STRING":测试字符串是否为空,空则为真,不空则为假;
                -n "STRING":测试字符串是否不空,不空则为真,空则为假;

Note:用于字符串比较时的用到的操作数都应该使用引号;

文件测试

[[email protected] ~]# test 1 -gt 3
[[email protected] ~]# echo $?
1
[[email protected] ~]# test 1 -gt 0
[[email protected] ~]# echo $?
0

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

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

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

时间: 2024-10-25 09:13:50

bash基本特性4的相关文章

Linux之bash shell特性

一.shell是什么? Shell 本身是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工作都是通过Shell完成的.Shell既是一种命令语言,又是一种程序设计语言.作为命令语言,它交互式地解释和执行用户输入的命令:作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支. 如图shell是一个应用程序,是用户管理应用程序的一个接口. 二.广义上shell的分类 GUI:图形用户界面 KDE,GNOME,XFCE CLI:

bash的特性(一)

一.Shell 说到bash,首先就必须先提一下shell.Shell是什么呢?Shell是一个C语言编写的给用户提供交互的接口程序.用户的大部分操作都是通过shell完成的. 广义上Shell主要分为两类: 1.GUI图形用户界面:主要有KDE.GNOME.XFCE等 2.CLI命令行界面:bash.zsh.fish.sh.csh.tcsh等.各个发行版主要使用bash. 二.bash的特性 (一)命令别名 在linux的使用和管理过程中,将会用到大量的命令,我们可以通过命令别名来避免一些常用

权限管理2 以及bash的特性 快捷键,补全功能以及变量的类型,登录类型,脚本

权限管理: owner          group         other 属主              属组            其它 权限:read   write     execute r           w            x 文件: -r:可以使用文件查看类的命令来显示相关内容 -w:可以使用编辑器修改内容 -x:可以将其发起一个进程 目录: -r:可以使用ls命令查看目录内容的的文件信息 -w:可以创建 删除文件 -x:可以使用ls -l命令查看内容的文件信息,

linux学习之路之bash及其特性

我们知道当我们用鼠标点击,或输入一个命令,系统就玩帮我们完成一个任务,那么当我们点击一个链接时,系统由是如何知道要去完成相应的操作呢?这是因为通过shell来完成的. 那么什么是shell呢? shell就是用户和操作系统之间的一个接口,通过这个接口shell接受来自用户的命令,并调用相应的应用程序来呼叫kernel来处理相应的工作. 在linux系统上面存放着多种类型的shell,这些shell存放在/etc/shells文件里,默认RedHat使用的shell为bash 下面介绍一些bash

谢烟客---------Linux之Bash基础特性条件测试&&自定义退出状态码(6)

条件测试 判断某需求是否满足,需要由测试机制来实现. 根据命令的执行状态结果,表达不同的测试条件 1.根据id命令的执行状态结果,判断用户是否存在 [[email protected] ~]# id root uid=0(root) gid=0(root) groups=0(root) [[email protected] ~]# echo $? 0 [[email protected] ~]# id help id: help: no such user [[email protected] 

bash的特性总结

什么是bash:       shell作为用户与计算机内核交互的接口,是用户与计算机沟通的桥梁,而bash(borne again shell)是众多shell里面最为流行一种,bash作为众多shell里面的一种有着众多的特性,掌握bash的众多特性将会是我们今后学习linux必经之路.       首先介绍一下bash的特性之一       命令历史:这个特性是将用户之前执行过的命令保存到缓存当中,通过上下键以及history命令的特殊选项来方便用过顺利完成操作系统功能.键入不带任何选项的

Linux之bash的特性

bash的特性(1)常用组合快捷键:,ctrl+d Ctrl+a: 跳转至命令行首 Ctrl+e: 跳转至命令行尾 Ctrl+u: 删除命令行首至当前光标所在处之前的所有内容 Ctrl+k: 删除当前光标所在处至命令行尾的所有内容 Ctrl+l: 清屏 Ctrl+c: 中止或取消 Ctrl+z: 把当命令送至后台 Ctrl+d:回到登陆用户登陆界面 (2)命令补全:命令的补齐,参数中目录或文件的补齐 当输入命令的部分是唯一的时候按TAB键就可以不全剩下的部分 当输入命令的部分不是唯一的,按两次T

5、自学——Linux的学习进度与任务【shell中bash的特性】

shell中bash的特性 shell中bash的特性 bash特性之一:命令行展开   把命令行的给定的一个特殊符号自动替换为别的字符串的机制 目录: 命令:cd [内置命令] 工作目录:当前所处的目录 cd:change directory(切换目录) cd 目标路径(不能是一个文件必须是一个目录) 所有从根起始的都是绝对路径:/文件名 基名:路径最后一个文件的名字  /x/y/z/m/n: 目标路径  /x/y/z/m: 是目录名或者路径名   两个命令: 获取路径的基名:   # bas

bash的特性

bash的特性 Bash (GNU Bourne-Again Shell) 是许多Linux发行版的默认Shell.事实上,还有许多传统UNIX上用的Shell,例如tcsh.csh.ash.bsh.ksh等等,Shell Script大致都类同,当您学会一种Shell以后,其它的Shell会很快就上手,大多数的时候,一个Shell Script通常可以在很多种Shell上使用 bash是大多数Linux系统以及Mac OS X默认的shell,它能运行于大多数类Unix风格的操作系统之上,甚至

bash及其特性笔记

bash及其特性 shell: 外壳 GUI: Gnome,KDE,Xfce CLI: sh, csh, ksb, bash, tcsh, ksh, zch 程序: 进程 允许同一个用户登陆多次,互不相干,进程独立 进程: 在每个进程看来,当前主机上只存在内核和当前进程 进程是程序的副本,进程是程序执行的实例 用户工作环境: # $ shell, 子shell bash: 1. 命令历史 2. 管道.重定向 3. 命令别名 4. 命令行编辑 5. 命令行展开 6. 文件名通配 7. 变量 8.