Shell基本知识

Shell是什么

  • Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以使用Shell来启动、挂起、停止甚至编写一些程序。
  • Shell还是一个功能相当强大的编程语言,易编写,易调试,灵活性较强。Shell是解释执行的脚本语言,在Shell中可以直接调用Linux系统命令。

Shell的分类

  • Shell的梁总主要语法类型有Bourne和C,这两种语法彼此不兼容。Bourne家族主要包括sh、ksh、Bash、psh、zsh;C家族主要包括:csh、tcsh。

    • Bourne Shell

      从1979起Unix就开始使用Bourne Shell,Bourne Shell的主文件名为sh,非常古老,功能简单的shell。

    • C Shell

      C Shell主要在BSD版的Unix系统中使用,其语法和C语言相类似而得名。

  • Bash

    Bash 与 sh兼容,现在使用的Linux就是使用Bash作为用户的基本Shell。

  • Linux中Shell
    • 使用 echo $SHELL查看当前shell。
    • 使用 vim /etc/shells查看Linux支持的shell 。

alias别名

  • 使用alias命令查看当前shell别名
//
#alias
alias ll=‘ls -l --corlor=auto‘
...
  • 在当前shell中设置临时别名alias alias_name=‘origin_name‘
//
#alias vi=‘vim‘
#vi //实际执行vim
  • 删除别名 unalias alias_name
#unalias vi

-当前用户永久配置别名 vi ~/.bashrc

#vi ~/.bashrc
// 添加别名,并保存退出
alias vi=‘vim‘
// 重新加载.bashrc文件到当前shell
#source ~/.bashrc
  • 别名生效顺序

    • 命令生效顺序

      1. 执行用绝对路径或相对路径的命令
      2. 别名
      3. Bash内部命令
      4. $PATH环境变量定义的目录查找顺序找到的第一个命令

注:别名的优先级高于系统中默认命令

常用快捷键

  • Ctrl+C 强制终止当前命令
  • Ctrl+l 清屏
  • Ctrl+a 光标移动到命令行首
  • Ctrl+e 光标移动到命令行首
  • Ctrl+u 从光标所在位置删除到行首
  • Ctrl+z 把命令放入后台
  • Ctrl+r 在历史命令中搜索

历史命令

history [选项] [历史命令保存文件]

  • options

    -c : 清空历史命令

    -w:把缓存中的历史命令写入历史命令保存文件 ~/.bash_history

注: history中历史命令为上次登录时使用的命令,可以使用-w同步写入这次登录后使用的命令

  • 历史命令默认会保存1000条,可以在环境变量配置文件/etc/profile 中修改HISTORYSIZE

历史命令的调用

  • 使用上、下箭头调用以前的历史命令
  • 使用“!n”重复执行第n条历史命令
  • 使用“!!”重复执行上一条命令
  • 使用“!字串”重复执行最后一条以该字符串开头的命令

Tab键补全

使用Tab键补全命令或文件名,一次Tab键未补全时,再次Tab键显示多个补全后命令或文件后从中选择使用的命令或文件,但有时没有该命令或文件时无法完成补全。

**注:**Tab键使用$PATH环境变量中给定的可执行文件的搜索路径中搜索命令

Bash中其他特殊符号

符号 作用
单引号。在单引号中所有的特殊符号,如’$’和’`’(反引号)都没有特殊含义。
“” 双引号。在双引号中特殊符号都没有特殊含义,但是”$”、”`”和”\”是例外,拥有“调用变量的值”、“引用命令”、和“转移符”的特殊含义。
` ` 反引号。在反引号括起来的内容是系统命令,在Bash中会先执行它,和()作用一样,推荐使用(),反引号容易看错。
$() 和反引号作用一样,用来引用系统命令
# 在shell脚本中,#开头行代表注释
$ 用于调用变量的值,如需要调用变量name的值时,需要用$name的方式得到变量的值。
\ 转移符。跟在\之后的特殊符号将失去特殊含义,变为普通字符。如 \$将输出 "$"符号,而不当做是变量引用

Shell变量

Shell中变量命名规则

  • 变量名必须以字母或下划线打头,名字中间只能由字母、数字和下划线组成
  • 变量名的长度不得超过255个字符
  • 变量名在有效的范围内必须是唯一的
  • 在Bash中,变量的默认类型都是字符串型

变量的分类

  • 用户自定义变量

    变量自定义的。

  • 环境变量

    主要保存和系统操作环境相关的数据。变量可以自定义,但是对系统生效的环境变量名和变量的作用是固定的。

  • 位置参数变量

    主要用来想脚本当中传递参数或数据,变量名不能自定义,变量作用是固定的,也是预定义变量的一种。

  • 预定义变量

    Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的

定义变量

// 变量名=变量值
#x=5 // 注:其间不能有空格 例如x= 5、x =5、x = 5等
// 打印变量
#echo $x
#echo ${x}

变量叠加

#x=123
#x="$x"456
#x=${x}789

变量查看

set可以查看系统下所有变量,包括环境变量和用户变量

// 查看所有变量
#set

// 设置此选项,调用未声明变量时报错(默认情况下无任何提示)
#echo $a

#set -u
#echo $a
-bash: a: unbound variable

变量删除

unset 变量名

// 删除变量,变量名前不能加$
#unset a

环境变量

环境变量和用户自定义变量的区别?

用户自定义变量只能在当前shell中生效

环境变量在当前shell和这个shell的所有子shell中生效

// 进入子shell
# bash
// 查看当前进程树
# pstree
|-
...
|-bash--bash--pstree
...
// 退出子shell
# exit
# pstree
|-
...
|-bash--pstree
...
// 当前shell中定义a
# a=5
# echo $a
5
// 进入子shell
# bash
# pstree
|-
...
|-bash--bash--pstree
...
// 无法查看父shell中的自定义的变量a
# echo $a

# eixt
// 父 shell 中声明环境变量 a,子shell可以看到父shell中的变量
# export $a
# bash
// 子shell中查看变量a
# echo $a
5
// 子shell无法删除父shell定义环境变量a
# unset a
# exit
// 父shell删除声明的环境变量a
# unset a

查看环境变量

  • set

    查看所有变量,包括用户自定义变量和系统环境变量

  • env

    仅用来查看环境变量

PS1环境变量

PS1变量:命令提示符设置

  • \d:显示日期,格式为 “星期 月 日”
  • \H:显示完整的主机名。如默认的主机名”localhost.localhost”
  • \t:显示24小时制时间,格式为“HH:MM:SS
  • \A:显示24小时制时间,格式为“HH:MM”
  • \u:显示当前用户名
  • \w:显示当前所在目录的完整名称
  • \W:显示当前所在目录的最后一个目录
  • $:提示符。如果root用户会显示提示符为“#”,如果普通用户会显示提示符“$”
# echo $PS1
[\u@\h \W]\$

PS2 定义换行提示符如下代码中的“>”

# ls \
>~

当前语系

locale命令查看当前语系

  • LANG:定义系统主语系的变量
  • LC_ALL:定义整体语系的变量
// 查看系统当前语系
# locale
...
# echo $LANG
// 查看Linux系统支持的所有语系
# locale -a |more

查询系统默认语系

cat /etc/sysconfig/i18n,下次开机启动后系统进入的是默认语言环境

# cat /etc/sysconfig/i18n
LANG="zh_CN.UTF-8"

Linxu中文支持

前提条件,正确安装中文字体和中文语系

  • 有图形界面,可以正确支持中文显示
  • 第三方远程工具,只要语系设定正确,就可以支持中文显示,XShell选择中文显示
  • 纯字符界面,必须使用第三方插件(如zhcon等)

位置参数变量

// 固定参数个数的求和shell脚本
#/bin/bash
num=$1
num=$2
sum=$(( $num1 + $num2 ))
echo $sum
位置参数变量 作用
$n n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十个以上的参数需要用大括号包含,如${10}
$* 这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体
$@ 这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待
$# 这个变量代表命令行中所有参数的个数
// $*和[email protected]的区别,保存为param.sh
#!/bin/bash
for i in "$*"
    do
        echo $i
    done
for i in "[email protected]"
    do
        echo $i
    done
# chmod u+x param.sh
# ./param.sh 1 2 3 4
1 2 3 4
1
2
3
4

预定义变量

预定义变量 作用
$? 最后依次执行的命令的返回状态。如果这个变量值为0,证明上一个命令正确执行;如果这个变量的值为非0,则证明上一个命令执行不正确
$$ 当前进程的进程号
$! 后台运行的最后一个进程的进程号(PID)

read

  • options

    1. -p “提示信息”:在等待read输入时,输出提示信息
    2. -t 秒数:read命令会一直等待用户输入,使用此选项可以指定等待时间
    3. -n 字符数:read命令只接受指定字符数,就会执行
    4. -s:隐藏输入的数据,适用于机密信息的输入

Shell运算符

shell变量的缺点?

  • shell变量是弱类型
  • 默认变量都是字符串

declare声明变量类型

declare来指明声明的变量类型

declare [+/-][option] 变量名

options:

  • -:给变量设定类型属性
  • +:取消变量的类型属性
  • -a:将变量声明为数组型
  • -i:将变量声明为整数型
  • -x:将变量声明为环境变量
  • -r:将变量声明为只读变量
  • -p:显示指定变量的被声明的类型
// shell变量默认为字符串
# aa=11
# bb=22
# cc=$aa+$bb
# echo $cc
11+22

// 明确声明变量类型
# declare -i cc=$aa+$bb // 自动转换了$aa、$bb为整型变量参与运算
# echo $cc
33
// 查看指定变量的属性
# declare -p cc
declare -i cc="33"
// 定义数组,shell脚本能够自动检测出这个movie变量是数组
# movie[0]=zp
# movie[1]=tp
# declare -a movie[2]=live 

# echo ${movie}
# echo ${movie[2]}
# echo ${movie[*]}
// export 调用 declare -x 变量 来声明环境变量
# bb=2
# export bb

// export真正调用是declare -x bb=2
# declare -x bb=2

// 查看所有的环境变量
#declare -p
...
declare -x bb=2
...
// 只读属性,变量不能重新赋值、删除、取消只读属性,一般不使用只读属性
# declare -rx test=123
# test=456
-bash: test: readonly variable
# unset test
-bash: test: cannot unset: readonly variable
# declare +r test
-bash: declare: test: readonly variable

数值运算方法

// 上节中数值计算的方式求cc的数值比较复杂,可以使用下面方式
# aa=1
# bb=2
# dd=$(expr $aa + $bb) // 注:$aa和$bb和+ 之间有空格
# echo $dd
// 上面的方式也很复杂
# aa=1
# bb=2
# dd=$(($aa+$bb))
# dd=$[$aa+$bb]

运算符的优先级

注:这里数值越大,优先级越高

变量测试

注:变量测试方式十分简洁但逻辑复杂,也不好记,实际工作中可以查阅;可以使用其他方式实现相同测试结果即可。

参考

慕课网Linux相关视频

此文章节选慕课网Linux视频内容作为笔记

时间: 2024-10-21 22:52:42

Shell基本知识的相关文章

【Linux系列】【基础版】第三章 Shell基础知识

3. Shell基础知识     3.1 Shell的由来         3.1.1 Bourne Agin Shell         3.1.2 其他的shell, 有 zsh, ksh等     3.2 查看有没有shell         3.2.1 yum list | grep zsh         3.2.2 ls /root/.bash_history         3.2.3 echo $HISTSIZE -> vi /etc/profile 修改HISTSIZE的值 -

centos shell基础知识 2015-4-8 第十二节课

centos shell基础知识  2015-4-8 第十二节课 上半节课 下半节课 history:命令历史 ,默认保存1000条命令历史 !!:上一条命令 !$:上一条命令的最后一个参数 !n:执行命令历史里的第n条命令 !字符:最近那个字符的命令 Tab 键可以补全文件路径或者命令alias a=“b” unalias a通配符 *匹配零个或多个字符 ?匹配一个字符输入输出重定向 >, >>, <, 2>, 2>>管道符 |作业控制 ctrl+z, jobs

《跟老男孩学Linux运维之shell编程实战》-第三章 shell变量知识进阶

本文讲解shell变量知识进阶. 以下为知识点的总结,关于练习,本文不不涉及,还需要各位小伙伴自己练习! 1.shell中的特殊位置参数变量,请见下表: 在企业场景下,"$?"的用法: (1)判断命令.脚本或函数等程序是否执行成功: (2)若在脚本中调用执行"exit 数字",则会返回这个数字给"$?"变量: (3)如果是在函数里,则通过"return  数字",把这个数字以函数返回值的形式传给"$?".

Shell基础知识

防伪码:长风破浪会有时,直挂云帆济沧海. 1.1 l Shell  简介 Shell 是一个 C 语言编写的脚本语言,它是用户与 Linux 的桥梁,用户输入命令交给 Shell 处理, Shell 将相应的操作传递给内核(Kernel),内核把处理的结果输出给用户. 下面是处理流程示意图: Shell 既然是工作在 Linux 内核之上,那我们也有必要知道下 Linux 相关知识. Linux 是一套免费试用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 UNIX 的多用户.多

shell基础知识总结

1. shell 对于一台计算机而言,其硬件受系统内核的控制,使用者想要控制计算机,就必须有与系统内核进行通讯的手段.而shell就是使用者与计算机进行通讯的手段之一.从命名上看,shell其实是相对于kernel(内核)而言,指系统与外界(使用者)进行接触的部分,一个提供系统功能给用户使用的软件,它接受来自用户的指令,然后调用相应的应用程序. 为了满足不同的需求,shell提供了两种执行命令方式: a. 交互式:解释并执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令. b. 程序

第一章 Shell基础知识

1.1 简介 Shell是一个C语言编写的脚本语言,它是用户与Linux的桥梁,用户输入命令交给Shell处理,Shell将相应的操作传递给内核(Kernel),内核把处理的结果输出给用户. 下面是处理流程示意图: Shell既然是工作在Linux内核之上,那我们也有必要知道下Linux相关知识. Linux是一套免费试用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CPU的操作系统. 1983年9月27日,Richard Stallman(理查德

Shell基础知识和编程规范

一,Shell环境查看 1.1 查看系统Shell支持情况 [[email protected] ~]# cat /etc/shells /bin/sh /bin/bash /sbin/nologin /usr/bin/sh /usr/bin/bash /usr/sbin/nologin 1.2 查看当前系统默认的Shell 方法一 [[email protected] ~]# echo $SHELL /bin/bash 方法二 [[email protected] ~]# grep root

Shell 基础知识和总结

调试脚本 检查脚本语法错误 bash -n /path/to/some_script 调试执行 bash -x /path/to/some_script shell里的变量 本地变量:只对当前shell有效:作用范围可以是整个shell程序文件,包括脚本中的函数,对其他的shell无效.    环境变量:对当前shell及子进程shell有效.    声明.赋值:export name=value 或者 declare -x name=value    局部变量:与函数的生命周期一样:     

shell基础知识---与监听服务器长连接端口状态

从未写过脚本我的最近接了俩脚本的需求,就在这分享一下我的我学到基础知识主要就四部分内容 一.变量 变量的定义 string='字符串' string="字符串" num=808string=str 字符串可以用单引号和双引号包裹,也可不包裹.数字话不用引号包裹的话就是一个数值. 变量也可以用来接受语句给变量赋值 file=`ls -l filepath/txt.txt` 上面的语句是接收filepath 下的txt.txt文档 数组的定义 程序中常用的还有数组在 Shell 中,用括号

shell基础知识讲解

第1章 shell基础 1.1 什么叫做shell编程 shell编程也叫做bash高级编程语法 1.2 常见的shell命令解释器 bash????????????redhat和centos使用 dsh????????????Ubuntu使用 csh和tcsh????unix使用 1.3 开发语言程序代码的分类说明 编译型????????????写完后需要编译才可以运行(C语言,java语言) 解释型????????????写完就可以直接运行(shell语言) 1.4 脚本规范 1.4.1 书