1、shell概述

echo执行shell_echo执行shell

shell叫做命令解释器,通过shell将linux的命令翻译成内核可以看的懂的二进制语言。

shell分类如下,我们主要使用bash这种shell脚本语言:

echo执行shell_环境变量_02

可以通过vim /etc/shells查看可以支持的脚本语言类型:

echo执行shell_shell_03

2、shell脚本语言执行方式

echo命令

echo [选项] [输出内容]
选项:
-e:支持反斜线控制的字符转换;
-n:取消输出后行末换行符号;

echo命令中若使用“- e”选项,则可以支持控制字符,如下表:

echo执行shell_linux_04

shell脚本执行

a.编写方式如下:

[root@jone ~]# vim helloworld.sh 

#!/bin/bash

echo "1111111! "

b.赋予执行权限,添加755权限即可;

c.执行方式:(1)相对路径进行执行;(2)绝对路径进行执行;(3)调用bash执行脚本;一般推荐第二种方式。

bash基本功能:

历史命令查看:

history [选项] [历史命令保存文件]
选项:
-c:清空历史命令
-w:把缓存中的历史命令写入文件,默认放在用户目录下的.bash_history中;
注意:可以通过修改/etc/profile文件来扩容历史命令存放的条目

历史命令的调用:(标红的常用)

echo执行shell_linux_05

关闭linux的命令告警声音:(取消掉下面红框中的注释即可,重启生效)

echo执行shell_shell_06

命令别名:

alias:查询已经设定的别名;
alias 别名='原命令'

可以通过修改/root/.bashrc环境变量,让别名永久生效:

echo执行shell_bash_07

bash常用快捷键

常用的快捷键如下表中所示,红框中为常用功能快捷键,注意ctrl+z并不是退出程序,而是暂停并放入后台。

echo执行shell_echo执行shell_08

echo执行shell_linux_09

输入输出重定向

bash的标准输入输出:

echo执行shell_bash_10

输出重定向:标红框的最为常用

echo执行shell_echo执行shell_11

输入重定向(用的很少):

wc [选项] [文件名]
选项:
-c:统计字节数;
-w:统计单词数;
-l:统计行数;

多命令顺序执行:

echo执行shell_bash_12

举例:ls && echo yes || echo no。该种方法可以作为一个判断,假如命令执行失败输出no,执行成功输出yes。

管道提取grep、管道符、通配符,前面已讲解过,不再叙述;

BASH中其他特殊符号

()与{ }用的较少,其他都较为常用

echo执行shell_环境变量_13

备注:对于()内子shell执行产生的结果不会影响父shell内的变量;

3、变量和运算符

       shell环境中变量的类型都是字符串类型,如果需要进行数值运算则必须要单独指定变量为数值类型。定义变量时若字符串中有空格等符号需要用双冒号""进行括起来,其中\、$都是具有特殊意义的转义字符,在""内需要用\进行说明,''单引号内则表示普通字符。变量名称不能以数字开头,由字母/下划线/数字组成,且=两边不能有空格。

linux变量分类:

  1. 用户自定义变量:名称-自定义,作用-自定义,内容-自定义;
  2. 环境变量(建议全部大写):(1)用户自定义环境变量:名称-自定义,作用-自定义,内容-自定义;(2)系统自带环境变量:命令-确定,作用-确定,内容-可以修改(建议默认);
  3. 位置参数变量:名称-确定,作用-确定,内容-可以改;
  4. 预定义变量:名称-确定,作用-确定,内容-可以改;

变量的增删改查:

变量的增加和修改直接在变量上进行赋值即可。主要是将一下变量的删除和查找。

变量查找set:

set [选项]
-u:若设定此选项,则调用未声明变量时会报错;
-x:在命令执行前,会把命令再输出一次(用的少);

变量删除unset:

unset [变量名]

对于系统环境变量的设置、查找和删除:

环境变量的定义使用export命令:

export [变量名]=[内容]

set与env都可以使用,查看到的环境变量可能会有部分重叠。环境变量的删除也用unset。

(1)PATH环境变量:系统查找命令的路径

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

一般的系统命令不需要加绝对路径就可以执行,主要是因为在linux执行命令时会去PATH的路径中查找是否存在该命令,若存在就可以执行,若不存在就无法执行。

对于个人写的脚本文件,要想直接就可以执行,不添加路径,有两种方法。(1)第一种是将脚本文件cp到/bin目录中;(2)第二种方法是在PATH路径中添加本脚本文件的路径(PATH=$PATH:[脚本路径])

(2)PS1变量(环境变量)

可以按照我们自己的需求来定义提示符。

echo执行shell_echo执行shell_14

PS1环境变量得默认值为:

[root@jone ~]# echo $PS1
[\u@\h \W]\$
[root@jone ~]# set | grep PS1
PS1='[\u@\h \W]\$ '

(3)LANG(环境变量):

linux中文支持:

  1. 安装了中文字体和编码;
  2. 操作终端必须支持中文编码;

定义了linux的主语系体系。

locale -a | more命令可以查看系统可以支持哪些语系;

查看当前系统的语系:

[root@jone ~]# locale
LANG=zh_CN.UTF-8
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_PAPER="zh_CN.UTF-8"
LC_NAME="zh_CN.UTF-8"
LC_ADDRESS="zh_CN.UTF-8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
LC_ALL=
[root@jone ~]#

要想修改LANG系统重启后也生效,则需要修改/etc/sysconfig/i18n文件内容。如果需要在纯字符界面显示中文,需要安装中文插件即可。

位置参数变量

往脚本中传递参数。

echo执行shell_shell_15

       第一个和第四个好理解,一个代表第几个参数,另一个代表传了多少个参数。第二个和第三个,可以通过测试可知,第二个是把输入的参数全部当作一个整体,第三个是把每个参数区分对待。

接收键盘输入

echo执行shell_shell_16

预定义变量

第一个好理解,上一条命令执行成功返回0,失败则非0。第二和第三个的意义如下所述,用的少。

echo执行shell_bash_17

echo执行shell_bash_18

shell的运算符

数值运算

declare声明变量类型

echo执行shell_echo执行shell_19

  • 一般对于数值运算时,declare -i cc=$a+$b等价于cc=$(($a+$b)),一般后者较为常用一些,也可以用expr/let,但使用比较少吧;
  • declare -x可以声明环境变量,效果等价于export;

数组:

对于shell语言而言,数组变量使用的也相对较少,输出数组所有值命令:echo ${[数组名][*]}

shell常用运算符

echo执行shell_shell_20

没什么好说的。

变量的测试与内容置换

通过检测x的值来判断y值

echo执行shell_shell_21

环境变量配置文件

source 配置文件/. 配置文件
说明:表示重新加载对应配置文件的环境变量;
  • /etc/profile:定义umask、history环境变量,所有用户生效;
  • /etc/profile.d/*.sh:定义LANG,所有用户生效;
  • ./bash_profile:定义PATH环境变量,不同用户各自生效;
  • ./bashrc:定义alias环境变量,不同用户各自生效;
  • /etc/bashrc:定义PS1环境变量、没有登录的UMAST权限、没有登陆的PATH变量,所有用户生效;

正常加载从/etc/profile到etc/bashrc;当我们有时误删了环境变量的配置文件时,提示符会变,这时可以从其他操作系统cp一个过来就行。

echo执行shell_echo执行shell_22

注销时生效的环境变量配置文件:.bash_logout,对于我们在退出登录时候所做的操作,比如清楚历史命令等;

其他环境变量配置文件:.bash_history等;

shell登录信息提示

登录前的提示信息:(1)/etc/issue;(2)/etc/issue.net;

登录后的提示信息:/etc/motd;

  • 第一个代表本地登录的终端提示信息;

echo执行shell_linux_23

  • 第二个代表远程的终端提示信息。除了修改/etc/issue.net提示信息,还需要修改ssh的配置文件信息,提示内容issue.net不支持转义符,也就不能显示本地终端上的\d、\m等对应内容,如下所示:

echo执行shell_echo执行shell_24

stty定义/查找/修改快捷键:

echo执行shell_shell_25