linux的命令解释器-----shell

什么是shell

        Shell是系统的
        用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行 。

        实际上Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核。不仅如此,Shell有自己的编程语言用于对命令的编辑,它允许用户编写由shell命令组成的程。shell程序语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用这种编程语言编写的shell程序与其他应用程序具有同样的效果。

shell命令分为两类

        内置命令 (shell内置),shell为了完成自我管理和基本的管理,不同的shell内置不同的命令,但是大部分都差不多 
        外置命令,在文件系统的某个目录下,有个与命令名称相同的文件。

        可以使用type 命令查看命令是file、alias还是builtin t

        ype -a 列出当前命令可以如何执行

        type -t 仅列出命令按照哪种方式执行

[root@server ~]# type -a useradd
useradd is /usr/sbin/useradd
[root@server ~]# type -t useradd
file
[root@server ~]#

可以通过环境变量PATH来让shell查看命令的可执行文件的路径

[root@server ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@server ~]#

shell中的变量

        变量简单说就是让某一个特定字符串代表不固定的内容,变量可分为两类:环境变量(全局变量)和普 通变量(局部变量)
1、普通变量

 普通变量也可称为局部变量,只能在创建它们的Shell函数或Shell脚本中使用,普通变量一般由开发者在 开发脚本程序时创建。
设置变量:
 变量命名的规则:只能使用数字、字母和下划线,且不能用数字开头 
变量名和变量值用“=”连接
等号两边不能有空格符
变量的赋值,一般有五种写法:

name=value 
name1='value' 
name_2="value" 
_name_3=`cmd` 
_na_me_4=$(cmd)

2、环境变量
环境变量也可称为全局变量,可以在创建它们的Shell 及其派生出来的任意子进程 Shell 中使用,环境变量又可分为自定义环境变量和 bash 内置的环境变量。
(1)bash内置的环境变量:用于定义 Shell 的运行环境,保证 Shell 命令的正确执行,Shell 通过环境 变量来确定登录用户名、命令路径、终端类型、登录目录等
(2)自定义环境变量:自定义环境变量可以在命令行中设置和创建,但用户退出命令时这些变量值就会 丢失。如果希望永久保存环境变量,可在用户家目录下的.bash_profile  或 .bashrc 文件中,或者全 局配置/etc/bashrc 或 /etc/profile  文件中定义,在将环境变量放入上述的文件中后,每次用户登 录时这些变量都将被初始化。
按照系统规范,所有环境变量的名字均采用大写形式
在命令行中设置环境变量:

export 变量名=value 
变量名=value ; 
export 变量名 
declare -x 
变量名=value

在文件中设置环境变量:永久生效要用root账户在.bashrc;bashrc;.bash_profile;bash_profile这四个文件中添加你想设置的永久变量

[root@server ~]# ll -a /root
total 84

-rw-r--r--.  1 root root   176 Aug 12  2018  .bash_profile
-rw-r--r--.  1 root root   227 Oct 30 03:30  .bashrc

显示与取消变量
(1)通过 echo 或 printf 打印变量

[root@server ~]# echo $HOME
/root
[root@server ~]# echo $UID
0
[root@server ~]# echo $PWD
/root
[root@server ~]# echo $SEHLL

[root@server ~]# echo $USER
root
[root@server ~]# printf "HOME"
HOME[root@server ~]# printf "HOME\n"
HOME
[root@server ~]# printf "PWD\n"
PWD
[root@server ~]#

(2)显示默认的环境变量

[root@server ~]# env
HOSTNAME=server
XDG_SESSION_ID=8
TERM=xterm
[root@server ~]#set 
BASH=/bin/bash
[root@server ~]# declare |head
BASH=/bin/bash

(3)用 unset 消除本地变量和环境变量

[root@server ~]# echo $USER
root
[root@server ~]# unset USER 
[root@server ~]#echo $USER
[root@server ~]#

 Linux 中的特殊符号

符号 功能 说明
可使用分号分隔多条命令 在一行上输入和执行多条较短的命令时可以使用;来分割命令
* 匹配任意0或多个字符 不能用于创建文件
匹配任意单个字符 不能用于创建文件
[] 匹配方括号中的任意一个字符,表示范围可以用“-” 不能用于创建文件
[^]或[!] 匹配方括号中的任意一个字符或数字后进行取反 用于查找和删除文件
{string,string} 匹配括号中的任意一个字符串,表示一个范围时,字符串之间可以加入“-” 用于创建、查看、删除文件
\ 使\后面的特殊字符失去效果 可以在命令行后加一个\,再按回车,表示并不执行该命令而是表似换行
` 反引号,一般用于引用命令,执行的时候反引号里面的命令会被执行,
' 单引号,将单引号内的所有内容原样输出 所有特殊字符在单引号内都会失去特殊含义
双引号,除了几个特殊字符外,双引号内的内容都原样输出

命令别名

别名是命令的快捷方式。对于需要经常执行,并需要很长时间输入的长命令创建快捷方式很有用。 
语法:alias 别名=’原命令 [选项]…… [参数]……’

查看已经设置的命令别名

[root@server ~]# alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias hello='echo hello everyone >> /file.txt'
alias hh='touch ~/file1'
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'
alias shuaxin='touch /file.txt'
alias xzegrep='xzegrep --color=auto'
alias xzfgrep='xzfgrep --color=auto'
alias xzgrep='xzgrep --color=auto'
alias zegrep='zegrep --color=auto'
alias zfgrep='zfgrep --color=auto'
alias zgrep='zgrep --color=auto'
[root@server ~]#

删除命令别名

[root@node13 ~]#unalias 别名

别名的永久化也需要进入.bashrc;bashrc;.bash_profile;bash_profile这四个文件中进行配置。

命令历史

history 命令可以查阅命令历史记录 ,也可在命令行利用向上或向下光标键来进行查询。 
语法:history [选项] [参数]

选项:
number:显示最近number条命令历史
-c:清空当前历史命令
-a  [file]:后面没跟文件时,默认将缓冲区中历史命令写入~/.bash_history中 -r [file]:将历史命令文件中的命令读入当前历史命令缓冲区中 
-w:将当前历史命令缓冲区命令写入历史命令文件中;

[root@server ~]# history 5
  497  declare |head
  498  echo $USER
  499  alias
  500  alias --help
  501  history 5

 命令行的快捷键

ctrl+d 输入已结束;也可当做exit
ctrl+c 键盘中断请求,终止当前的命令
Ctrl+a 移动到当前行的开头
Ctrl+e 移动到当前行的结尾
Ctrl+l 清屏==clear
Ctrl+u 剪切命令行中光标所在处之前的所有字符(不包括自身) Ctrl+k 剪切命令行中光标所在处之后的所有字符(包括自身) ctrl+←/→  光标在命令行中按照单词跳转
 

以下是有关shell的命令使用

1、当前用户永久生效的命令别名 
(1)写一个命令命为hello,实现的功能为每输入一次hello命令,就有hello,everyone写入文 
件/file.txt中。 
(2)写一个命令别名为shuaxin,实现的功能为每输入一次该命令,file.txt文件的所有时间就更新为当前 时间。

(1)写一个命令命为hello,实现的功能为每输入一次hello命令,就有hello,everyone写入文 
件/file.txt中。 

先进入vim界面

[root@server ~]# vim .bashrc

随后添加hello的vim命令

alias hello="echo hello everyone >> /file.txt"
[root@server ~]# source .bashrc

验证

[root@server ~]# hello
[root@server ~]# cat /file.txt
hello everyone
[root@server ~]#

(2)写一个命令别名为shuaxin,实现的功能为每输入一次该命令,file.txt文件的所有时间就更新为当前 时间。

进入vim编辑界面

[root@server ~]# vim .bashrc

在vim界面中添加相关命令

alias shuaxin='touch /file.txt'
[root@server ~]# source .bashrc

验证

[root@server ~]# ll /file.txt
-rw-r--r--. 1 root root 15 Oct 30 03:33 /file.txt
[root@server ~]# shuaxin
[root@server ~]# ll /file.txt
-rw-r--r--. 1 root root 15 Oct 30 03:36 /file.txt
[root@server ~]#

2、所有用户生效的命令别名 
写一个所有用户都生效的命令别名为hh,每一个用户输入这个命令之后可以在该用户家目录下创建一个file1 文件。

先进入vim编辑界面

在vim界面中加入命令

alias hh='touch ~/file1'

[root@server ~]# source /etc/bashrc

验证

[root@server ~]# hh
[root@server ~]# ll
total 16
-rw-r--r--. 1 root root  197 Oct 30 03:25 '!'
-rw-------. 1 root root 1382 Oct 16 12:54  anaconda-ks.cfg
drwxr-xr-x. 2 root root    6 Oct 16 13:28  Desktop
drwxr-xr-x. 2 root root    6 Oct 16 13:28  Documents
drwxr-xr-x. 2 root root    6 Oct 16 13:28  Downloads
-rw-r--r--. 1 root root    0 Oct 30 03:40  file1
-rw-r--r--. 1 root root    0 Oct 24 07:39  file-10-24
-rw-r--r--. 1 root root 1654 Oct 16 13:04  initial-setup-ks.cfg
drwxr-xr-x. 2 root root    6 Oct 16 13:28  Music
-rw-r--r--. 1 root root 3283 Oct 28 11:28  myfile.zip
drwxr-xr-x. 2 root root    6 Oct 16 13:28  Pictures
drwxr-xr-x. 2 root root    6 Oct 16 13:28  Public
drwxr-xr-x. 2 root root    6 Oct 16 13:28  Templates
drwxr-xr-x. 2 root root    6 Oct 16 13:28  Videos
[root@server ~]# su - rehl
[rehl@server ~]$ hh
[rehl@server ~]$ ll
total 0
drwxr-xr-x. 2 rehl rehl 6 Oct 16 13:09 Desktop
drwxr-xr-x. 2 rehl rehl 6 Oct 16 13:09 Documents
drwxr-xr-x. 2 rehl rehl 6 Oct 16 13:09 Downloads
-rw-rw-r--. 1 rehl rehl 0 Oct 30 03:41 file1
drwxr-xr-x. 2 rehl rehl 6 Oct 16 13:09 Music
drwxr-xr-x. 2 rehl rehl 6 Oct 16 13:09 Pictures
drwxr-xr-x. 2 rehl rehl 6 Oct 16 13:09 Public
drwxr-xr-x. 2 rehl rehl 6 Oct 16 13:09 Templates
drwxr-xr-x. 2 rehl rehl 6 Oct 16 13:09 Videos
[rehl@server ~]$

3、命令历史:查看命令历史,并且调用第十行命令

首先查看历史命令

[root@server ~]# history
    1  cd
    2  pwd
    3  su  -  rhel
    4  exit
    5  su  rhel
    6  su - rhel
    7  logout
    8  su - rhel
    9  su - rehl
   10  exit
   11  hostnamectl set-hostname other
   12  hostnamectl set-hostname server

使用第10行的命令

[root@server ~]# history !10
history exit
-bash: history: exit: numeric argument required
[root@server ~]#

或者直接打!10也可以执行第十行 的命令

你可能感兴趣的:(linux,运维,服务器)