认识和使用bash

来源:互联网 发布:阿里云数据库种类 编辑:程序博客网 时间:2024/06/02 13:13

        一.认识bash

         1. 简介

         想要使用bash,第一步首先就需要了解bash是个什么东东?那bash到底是个什么东西呢,简单来说他就是个shell,那shell又是个什么玩意儿呢,你可以这么理解shell,他就是个壳,是操作系统的壳,而通过操作系统的核你可以去使用计算机的各种资源。百度上给的解释是一个命令解释器,就是说无论你在计算机上做什么操作,最后还是会调用到计算机的资源的,无论是计算资源还是存储资源。而这些资源都是被操作系统的核所管理的,而想要使用操作系统的核只能通过shell来解析你所下发的命令,比如我想放一首歌,我可以作为一个应用程序,我下发了一个命令:放歌,然后shell接收到了,并解释过后告诉内核,调用声卡声驱去播放歌曲;

         2.功能

             a.命令的记忆能力:简言之就是能记住你执行过的命令,按上下健即可;

             b.命令与文件的补全能力:按tap键就能补全未输入完的命令和文件名;

             c.命令别名的设置能力:即可以使用诸如alias lm = 'ls -al'这种命令来修改命令的别名;

             d.作业,前台,后台控制:让作业更为顺利;

             e.脚本:创建类似批处理的脚本,可以将需要的命令写入一个文件内;

              f.通配符:类似/usr/*之类的通配符喽;

          3.内置区分命令type

              bash本身是内置了一些命令,类似与cd这种简单的命令,但是为了linux功能的完善,其他软件也提供了很多命令,类似vim等,那么如何区分呢?

              这就需要用到type这个命令,下面看看type的用法:

              type    -[tpa]   name;

              参数:

              不加参数:显示是外部命令还是内部命令;

               -t:加入一些解释的字眼:

                              file:表示外部命令;

                              alias:表示该命令为命令别名所设置的名称;

                              builtin:表示为bash内置的命令功能;

              -a:会有PATH变量定义的路径中,将所有含name的命令都列出来

下面就以vim和cd这两个为示例看一下:

[giyoo@localhost ~]$ type cd
cd 是 shell 内嵌
[giyoo@localhost ~]$ type vim
vim 是 /usr/bin/vim
[giyoo@localhost ~]$ type -t cd
builtin
[giyoo@localhost ~]$ type -t vim
file
[giyoo@localhost ~]$ type -p cd
[giyoo@localhost ~]$ type -p vim
/usr/bin/vim
[giyoo@localhost ~]$ type -a vim
vim 是 /usr/bin/vim
vim 是 /bin/vim
[giyoo@localhost ~]$ type -a cd
cd 是 shell 内嵌
cd 是 /usr/bin/cd
cd 是 /bin/cd
[giyoo@localhost ~]$

        二.shell的变量功能

          1.变量的显示与设置

              变量的显示就会使用到echo这个命令,下面看一下详细的用法:

这里使用echo显示变量的时候需要加上$符号

[giyoo@localhost ~]$ echo $HOME
/home/giyoo
[giyoo@localhost ~]$ echo $MAIL
/var/spool/mail/giyoo
[giyoo@localhost ~]$

修改:

 [giyoo@localhost ~]$ #修改其实比编程中声明变量要简单的多,只需要一个等号就好,例如:
[giyoo@localhost ~]$ echo $city

[giyoo@localhost ~]$ city=shanghai
[giyoo@localhost ~]$ echo $city
shanghai
[giyoo@localhost ~]$
这样就一目了然了。这里还要说明下反单引号的使用

1.反单引号内如果包含变量那么变量只是一个一般字符并不代表变量,双引号则依旧代表变量;

2.反单引号如果在一串命令内的话,那么反单引号内的命令会被先执行;

  [giyoo@lo

           2.环境变量       

              环境变量可以帮助我们达到很多功能,用过java的人一定对环境变量很熟悉,那么我们要如何查看linux中的环境变量呢,其实就是env和export两个命令,另外介绍下一些主要的环境变量:

              HOME:主文件夹;

              SHELL:目前环境的SHELL;

              HISTSIZE:历史命令记录的个数;

              PATH:执行文件查找的路径;

              LANG:使用的语系;

              RANDOM:随机数;

             另外还可以使用set查看所有的变量,包括自己声明的变量,另外$和?也是两个变量,$就是PID,而?则代表你输入命令的回传码;

              最后介绍下"export  变量名称”这个用法,这是将自定义的变量设置成环境变量的方法;

           3.变量的读取,数组与声明:read,array,declare

               read:读取键盘的命令是使用read这个命令,常用在shell脚本的编写当中;

               用法:

               read   [-pt]   variable

               -p:后面可以接提示符;

               -t:接等待用户输入的秒数;

               示例:

[giyoo@localhost ~ 14:53:29 #25]$read -p "please input your name" -t 30 name
please input your name    
[giyoo@localhost ~ 14:54:24 #27]$echo $name
giyoo
[giyoo@localhost ~ 14:54:35 #28]$

                declare/typeset:声明变量的类型
                用法:

                declare   [-aixr]   variable

                -a:将后面的变量定义为数组类型;

                 -i:将后面的变量定义为整数类型;

                 -x:将后面的变量定义为环境变量;

                 -r:将变量设置为readonly类型,该变量不能被更改和重设;

                 数组的声明就类似与变量的声明了,var[index]=content,这里不多谈了;

           4.变量的删除,替代与替换

              变量的删除  

              变量的删除其实只要记住#,##,%,%%这四个符号即可了,#代表从左往右删除最短的变量内容,##代表最长的,%,%%方向与#,##相反;

               示例:

[giyoo@localhost ~]$ path=${PATH}
[giyoo@localhost ~]$ echo $path
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/giyoo/.local/bin:/home/giyoo/bin
[giyoo@localhost ~]$ #这时我想要删除带有local/bin的一行
[giyoo@localhost ~]$ echo ${path#/*local/bin}
:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/giyoo/.local/bin:/home/giyoo/bin
[giyoo@localhost ~]$ #删除前面所有变量仅留最后一个
[giyoo@localhost ~]$ echo ${path##/*:}
/home/giyoo/bin

%的用法同#;

               变量的替换

               变量的替换就很简单了,看下面的例子即可:

[giyoo@localhost ~]$ echo $path
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/giyoo/.local/bin:/home/giyoo/bin
[giyoo@localhost ~]$ echo ${path/giyoo/GIYOO}
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/GIYOO/.local/bin:/home/giyoo/bin
[giyoo@localhost ~]$ echo ${path//giyoo/GIYOO}
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/GIYOO/.local/bin:/home/GIYOO/bin
[giyoo@localhost ~]$ 一个/表示替换第一个,//代表替换全部

              变量的测试与内容替换

[giyoo@localhost ~]$ echo $username

[giyoo@localhost ~]$ username=${username:-root}
[giyoo@localhost ~]$ echo $username
root
[giyoo@localhost ~]$ :-这两个字符表示对username变量赋值

       三.命令别名与历史命令

           1.命令别名设置:alias,unalias

           这里就简单举两个例子即可:

[giyoo@localhost ~]$ #例如我经常使用ls -ai或者其他命令的时候,每次都要打出全部命令会很麻烦,所以我就使用alias设置个别名
[giyoo@localhost ~]$ alias lk='ls -al'
[giyoo@localhost ~]$ lk
总用量 104
drwx------. 18 giyoo giyoo 4096 5月  11 12:21 .
drwxr-xr-x.  4 root  root  4096 5月   3 18:45 ..
drwx------.  3 giyoo giyoo 4096 5月   5 09:25 .adobe
-rw-------.  1 giyoo giyoo 1870 5月  10 23:38 .bash_history
-rw-r--r--.  1 giyoo giyoo   18 8月   3 2016 .bash_logout
-rw-r--r--.  1 giyoo giyoo  193 8月   3 2016 .bash_profile
-rw-r--r--.  1 giyoo giyoo  231 8月   3 2016 .bashrc
drwx------. 16 giyoo giyoo 4096 5月   9 13:00 .cache
drwxr-xr-x. 16 giyoo giyoo 4096 5月  10 09:50 .config
-rw-------.  1 giyoo giyoo   16 5月   3 20:11 .esd_auth
-rw-------.  1 giyoo giyoo 3724 5月  11 12:21 .ICEauthority
drwx------.  3 giyoo giyoo 4096 5月   3 20:11 .local
drwx------.  3 giyoo giyoo 4096 5月   5 09:25 .macromedia
drwxr-xr-x.  5 giyoo giyoo 4096 5月   3 23:17 .mozilla
drwxrw----.  3 giyoo giyoo 4096 5月   5 09:07 .pki
drwxr-xr-x.  3 giyoo giyoo 4096 5月   3 20:11 .redhat
-rw-------.  1 giyoo giyoo 4099 5月   4 17:09 .viminfo
[giyoo@localhost /]$ #取消设置
[giyoo@localhost /]$ unalias lk
[giyoo@localhost /]$ lk
bash: lk: 未找到命令...
           2.历史命令:history
           历史命令顾名思义就是提供命令历史的服务,就是你按下上下键时显示的命令,那我们来看看history的用法:

history   [n]

history   [-c]

history   [-raw]   histfiles

参数:

n:数字,是要列出最近的n条命令的意思

-c:将目前shell中的所有history内容全部消除

-a:将目前新增的history命令新增入histfiles中,若没有加histfiles,则默认写入~/.bash_history中

-r:将histfiles的内容读到目前这个shell的history记忆中

-w:将目前的history记忆内容写入histfiles中

           四.Bash Shell 的操作环境      

                    1.路径与命令查找顺序

                     命令的查找顺序简言之就是先alias再builtin再由$PATH找到/bin/echo

                     [root@localhost /]# #设置echo别名echo -n,然后在查找echo执行的顺序
[root@localhost /]# alias echo='echo -n'
[root@localhost /]# type -a echo
echo 是 `echo -n' 的别名
echo 是 shell 内嵌
echo 是 /usr/bin/echo
echo 是 /bin/echo
[root@localhost /]#
                 2.登陆设置

                登陆设置主要就是在/etc/issue和,/etc/motd中设置

                 其中/etc/issue主要设置登陆界面上的信息,而/etc/motd则是登陆后显示的提示信息,etc/issue设置与PS1这个变量设置相同,有兴趣的可以查看PS1这个变量的用法,/etc/motd则是自己随意输出的提示信息;

                3.环境设置

                stty -a 查询按键以及按键内容;

                set   [-uvCHhmBx] 设置整个输入输出的环境,因为目前linux的操作环境默认情况下已经很好了,所以这些设置基本用不到,这里就不详细介绍了;

               4.通配符

               bash中有很多有用的通配符,下面我们就来看看有哪些通配符。

               *    :代表0到无穷多个字符;

               ?    :代表一定有一个任意字符;

               []    :代表一定有一个在括号中的字符;

               [-]   :若有减号在中括号时,代表在编码顺序内的所有字符:

               [^]  :若中括号中的第一个字符^,表示原向选择,即除了中括号中字符的其他字符;


0 0