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也可以执行第十行 的命令

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值