bash内建命令

1、local命令

基本介绍

  local命令是用来定义一个局部变量的,它只能定义在函数中,并且随着函数的结束而被销毁

基本语法

  local  [option]  name[=value]

使用案例

#!/bin/bash

function func(){

local key=123

echo $key

}

func

 

2、alias命令

基本介绍

  alias命令使用来设置一个命令的别名。

为什么需要设置别名?

  当我们使用一个命令时,你可能需要通过选项来打开这个命令的许多功能,但是这个命令你又常常使用,因此, 每次你使用都敲击一遍是很麻烦的事情,因此,bash提供了一个别名alias。

基本语法

alias [-p] [name[=value] ... ]

使用注意

  当设置了一个别名后,使用这个命令就会默认去找别名来执行,当你想要需要改变一些参数,那么这样就麻烦了,因此,bash提供了一种做法,可以屏蔽别名只需在命令前面加一个反斜线\;当然还有另一种做法就是使用命令的全路径

例子:

  \cp  /etc/fstab  /tmp/

  /bin/cp  /etc/fstab  /tmp/

  取消一个别名使用unalias  name命令

使用案例

[root@oldboy ~]# alias

alias cp='cp -i'

alias grep='grep --color'

alias l.='ls -d .* --color=auto'

alias ll='ls -l --color=auto'

alias ls='ls --color=auto'

alias mv='mv -i'

alias rm='rm -i'

[root@oldboy ~]# alias mysql='mysql -u root -p123456 -h localhost'

[root@oldboy ~]# alias

alias cp='cp -i'

alias grep='grep --color'

alias l.='ls -d .* --color=auto'

alias ll='ls -l --color=auto'

alias ls='ls --color=auto'

alias mv='mv -i'

alias mysql='mysql -u root -p123456 -h localhost'

 

3、logout命令

基本介绍

  bash提供了一个logout命令可以退出当前登录bash程序

  当然,我们也能使用bash提供的快捷键ctrl+d退出登录bash程序

 

4、jobs命令

基本介绍

  jobs命令可以查看后台运行的程序。当运行一个程序时,他默认时在前台运行,也就是阻塞在当前shell进程上运行,你只有退出当前程序才能去执行其他命令,因此,这样不是很方便去处理其它命令,此时bash提供了一个&操作符,使用一个命令或者说程序运行在后台。

基本语法

jobs  [-lnprs]

  常用选项

    -l :(小写 L)提供了更多的关于列出的每一个作业的信息。此信息包括了作业号、当前作业、进程组标识、状态和启动作业的命令。

    -n :显示自从最后一次通知后停止或退出的作业。

    -p:显示了所选定的作业的进程组引导符的进程标识。

案例演示

[root@oldboy scripts]# cat while.sh

#!/bin/bash

while true;do

        echo 123>/dev/null

        sleep 10

done;

[root@oldboy scripts]# bash while.sh &

[1] 3098

 

5、fg命令

基本介绍

  当我们将一个程序运行在后台后,又想将它拿到前台来执行,那么可以使用fg命令

基本语法

  fg  [jobsID]

使用案例

[root@oldboy ~]# jobs

[1]+  Stopped                 vim /etc/fstab

[root@oldboy ~]# fg 1

vim /etc/fstab

#

# /etc/fstab

# Created by anaconda on Mon Dec 24 23:39:48 2018

#

# Accessible filesystems, by reference, are maintained under '/dev/disk'

# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info

#

/dev/mapper/vg_oldboy-lv_root /                       ext4    defaults        1 1

UUID=bae75a9c-b1d0-4562-b822-da366629a93b /boot                   ext4    defaults        1 2

/dev/mapper/vg_oldboy-lv_swap swap                    swap    defaults        0 0

tmpfs                   /dev/shm                tmpfs   defaults        0 0

devpts                  /dev/pts                devpts  gid=5,mode=620  0 0

sysfs                   /sys                    sysfs   defaults        0 0

proc                    /proc                   proc    defaults        0 0

 

 

6、bg命令

基本介绍

  将linux 的作业放入到后台运行

基本语法

  bg  [%jobsID]

7、disown命令

基本介绍

  disown命令使已经在运行的用户进程使其不受HUP信号的影响

基本语法

  disown  [options...]

  常用选项

    如果不指定选项表示从作业表中全部删除

      -h jobspec:来使某个作业忽略HUP信号

      -ah:来使正在运行的作业忽略HUP信号。

      -rh:来使正在运行的作业忽略HUP信号。

8、nohup命令

基本介绍

  当我们使用logout命令时,就会给终端发送 hangup 信号来通知其关闭所有子进程。但是,有时候我们不希望当前终端退出后进程就被终止了,因此,提供了nohup命令或者setsid命令来拒绝接受hup信号或者说忽略hup信号

基本语法

  nohup|setsid  COMMAND

使用案例

  模拟在已有ssh模拟终端上开启一个忽略后台运行的ssh客户端登录程序,然后退出当前shell登录程序,然后再登录查看那个忽略后台运行的ssh客户端登录程序

使用案例

[

root@oldboy ~]# nohup ping www.sohu.com &

[1]2896

[root@oldboy ~]# jobs

[2]+  Running                 nohup ping www.sohu.com &

[root@oldboy ~]# logout

[root@oldboy ~]# ps -ef|grep www

root       2895      1  0 20:39 ?        00:00:00 ping www.sohu.com

 

9、mapfile命令

基本语法

  从标准输入中或者文件中读取指定的行到数组变量中。mapfilereadarray作用类似

基本语法

  mapfile  [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]

    常用选项

      -n  count:指定要读取多少行

      -O  index:表示从哪个位置开始读取,默认位置是0

      -s  count:放弃读取count

      -u  文件:表示从文件中读取内容到数组而不是从标准输入中读取到数组

10、pushd命令

基本介绍

  将一个目录路径加入到一个栈中,并且切换当指定的目录下去,同时每次pushd进入这个路径栈后会打印当前栈中的路径有哪些路径

基本语法

  pushd  [paths....]

基本使用

[root@oldboy CA]# pushd /tmp

/tmp /etc/pki/CA

[root@oldboy tmp]# pushd /usr

/usr /tmp /etc/pki/CA

[root@oldboy usr]# pushd

/tmp /usr /etc/pki/CA

 

 

11、popd命令

基本语法

  意为弹出的意思,对于栈这种数据结构来说,弹出一般是弹出后pushd进去的路径。但是popd后的路径,在路径栈中不能找到,除非再一次pushd

基本语法

  popd [options...]

  常用选项

    +N:表示将第N个目录删除,但是是从左边开始计数的(注意:N是从0

开始的),同时弹出时会切换到弹出的目录

    -N:表示将第N个目录删除,但是是从右边开始计数的(注意:N是从0

开始的),同时弹出时会切换到弹出的目录

    -n:表示弹出时不切换目录

基本使用

[root@oldboy etc]# pushd /bin

/bin /etc /tmp /usr /etc/pki/CA

[root@oldboy bin]# popd +1

/bin /tmp /usr /etc/pki/CA

[root@oldboy bin]# popd +0

/tmp /usr /etc/pki/CA

[root@oldboy tmp]# pushd /etc/

/etc /tmp /usr /etc/pki/CA

[root@oldboy etc]# popd -1

/etc /tmp /etc/pki/CA

 

12、break命令

基本语法

停止一个循环的执行,与这个相似的还有continue,只不过这个是跳过本次循环

基本语法

  continue [n]

  break  [n]

基本使用

#!/bin/bash

declare -i x=0

while true;do

        if [ $x -eq 10 ];then

           break

        fi

        let x=$x+1

        echo $x

done

[root@oldboy scripts]# bash while.sh

1

2

3

4

5

6

7

8

9

10

 

 

13、printf命令

基本介绍

  printf命令用于格式化输出

基本语法

  printf  FORMAT

  格式化输出字符

    %%:转义%

    \n:换行

    \e:回退

    \t:制表符

基本使用

[root@oldboy ~]# printf "as\tdaa"

as      daa

14、builtin命令

基本介绍

  允许用户自定义与bash内建命令相同的函数,但是调用时需要使用builtin命令来明确指明是调用自定义的还是内建的

基本语法

  builtin  [COMMAND  [ARGS...]]

 

15、pwd命令

基本介绍

  打印当前的绝对路径

基本语法

  pwd  [-LP]

16、dirs命令

基本介绍

  打印目录栈中的一些目录路径信息,这些路径是通过pushd命令添加进去的

基本语法

  dirs  [options...]

常用选项

  -p:将目录栈中的路径垂直显示

  -l:将目录栈中的路径横向显示

  -v:将目录内容带索引的显示

  -c:清除目录栈中所有的路径

    注意:如果在目录栈中存在当前所在的路径,那么清除全部路径时,不能清除当前所在路径

基本使用

[root@oldboy etc]# pushd /var

/var /etc

[root@oldboy var]# pushd /usr

/usr /var /etc

[root@oldboy usr]# pushd /bin

/bin /usr /var /etc

[root@oldboy bin]# dirs -v

 0  /bin

 1  /usr

 2  /var

 3  /etc

[root@oldboy bin]# dirs -l

/bin /usr /var /etc

[root@oldboy bin]# dirs -p

/bin

/usr

/var

/etc

[root@oldboy bin]# cd

[root@oldboy ~]# dirs -p

~

/usr

/var

/etc

[root@oldboy ~]# dirs -l

/root /usr /var /etc

[root@oldboy ~]# dirs -v

 0  ~

 1  /usr

 2  /var

 3  /etc

 

17、enable命令

基本介绍

  显示启用或者禁用的内建命令

基本语法

  enable  [options...]  [COMMAND]

常用选项

  -a  [COMMAND]:显示所有的启用的内建命令

  -n  COMMAND:关闭指定的内建命令

基本使用

[root@oldboy ~]# enable -a |grep let

enable let

[root@oldboy ~]# enable -n let

[root@oldboy ~]# enable -a |grep let

enable -n let

[root@oldboy ~]# let x=1

-bash: let: command not found

[root@oldboy ~]# enable -a let

[root@oldboy ~]# let x=1

[root@oldboy ~]# echo $x

1

[root@oldboy ~]# enable -a |grep let

enable let

 

18、cd命令

基本介绍

  进入某个目录,但是这个目录必须有可执行的权限

基本语法

  cd  [DIR...]

基本使用

[root@oldboy ~]# cd /home/oldboy

[root@oldboy oldboy]#

 

使用注意

  cd命令后边可以不接目录表示进入用户的家目录,当然我们可以是用cd  ~进入家目录。同时cd命令还有一个小技巧,就是使用cd  - ,能够在两个目录之间来回切换。这个来回切换是可以用一个环境变量来维护的,旧路劲环境变量$OLDPWD

基本使用

[root@oldboy ~]# cd $OLDPWD

[root@oldboy home]# cd $OLDPWD

[root@oldboy ~]# cd $OLDPWD

[root@oldboy home]# cd $OLDPWD

[root@oldboy ~]# cd $OLDPWD

[root@oldboy home]# cd $OLDPWD

 

19、read命令

基本介绍

  从标准输入中或者文件中读取内容存入变量中

基本语法

  read [-a aname] [-d delim] [-n nchars]  [-N  nchars]  [-p prompt] [-t timeout] [-u fd] [name ...]

常用选项

  -a  arr:将分割后的字段一次存入指定的arr数组中

  -p  str:提示字符串

  -t  time:超出时间就退出

  -s:静默模式

  -d  delimiter:指定分隔符

  -n:限制读取n个字符自动结束读取(在没有读满n个字符前,如果按下了回车或者换行符,那么都会自动结束)

  -N:严格要求读满N个字符才自动结束读取(即使中途遇到回车或者换行都不结束)

  -u  fd:表示从文件中读取内容

  -e:表示如果输入内容来自终端,则调用readline库进行读取

案例演示

[root@oldboy ~]# read -a arr

1 2 3

[root@oldboy ~]# echo ${arr[0]}

1

[root@oldboy ~]# echo ${arr[1]}

2

[root@oldboy ~]# echo ${arr[2]}

3

[root@oldboy ~]# read -n 5 -a arr

aaaaa[root@oldboy ~]# echo ${arr}

aaaaa

a[root@oldboy test]# read -d "a" -a arr   //a字符作为终端结束输入字符

s

d

f

g

h

h

r

a[root@oldboy test]# echo ${arr[1]} //结束输入

d

[root@oldboy test]# echo ${arr[0]}

s

 

 

 

未完,待续........