Linux学习笔记(四):Shell基础

linux学习笔记(四):Shell基础

Shell概述

Shell是一个命令解释器,还是一个编程语言。
Shell是解释执行的脚本语言(不需要编译),在Shell中可以直接调用Linux系统命令。

Shell的分类

Bourne Shell:1979年Unix就开始使用,主文件名为:sh
C Shell:主要在BSD版的Unix系统中使用。

Bourne和C两种语法彼此不兼容。Bourne家族主要包括sh、ksh、Bash、psh、zsh;C家族主要包括:csh、tcsh

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

Shell脚本的执行方式

echo 输出命令

echo [选项] [输出内容]
    -e 支持反斜线控制的字符转换
    比如:
        \b 退格键或向左删除键
注意:输出时要加单/双引号
比如:
echo -e ab\bc
输出 abbc 【错误】
echo -e 'ab\bc'
输出 ac   【正确】

echo -e "\e[1;31m abcd\e[0m" //开启颜色输出
可以输出的颜色
30m 黑色    31m 红色    32m 绿色    33m 黄色
34m 蓝色    35m 洋红    36m 青色    37m 白色

编写脚本时首行:

#!/bin/Bash //标称写的程序是Shell脚本

脚本执行:

法一:赋予执行权限,直接运行
chmod 755 hello.sh
./hello.sh

法二:通过Bash调用执行脚本
Bash hello.sh

Windows写的脚本在Linux中可能无法执行,比如回车符不一样,所以在Linux中执行Windows编写的脚本时,需要使用转换命令
dos2unix [脚本名]

Bash基本功能

1、历史命令:查看写过的命令
history [选项] [历史命令保存文件]
-c 清空历史命令
-w 把缓存中的历史命令写入历史命令保存文件 ~/.bash_history

历史命令默认会保存1000条,可以在环境变量配置文件/etc/profile中修改
历史命令的调用:
1)使用上、下箭头调用以前的历史命令
2)使用“!n”重复执行第n条历史命令
3)使用“!!”重复执行上一条命令
4)使用“!字串”重复执行最后一条以该字串开头的命令

2、命令与文件补全

在输入命令或文件时,按“Tab”键就会自动进行补全

3、命令别名
alias 别名='原命令'

命令执行时顺序:
1)第一顺位执行用绝对路径或相对路径执行的命令
2)第二顺位执行别名
3)第三顺位执行Bash的内部命令
4)第四顺位执行按照$PATH环境变量定义的目录查找顺序找到的第一个命令

让别名永久生效,将命令写入下面的文件
vi root/.bashrc
删除别名:
unalias 别名

4、Bash常用快捷键

通常是ctrl+键
常用的快捷键:
ctrl+C 强制终止当前命令
ctrl+L 清屏
ctrl+U 删除或剪切光标之前的命令
ctrl+Y 粘贴剪切内容
ctrl+R 在历史命令中搜索,按下后就会出现搜索界面
ctrl+D 退出当前终端

5、输入输出重定向

1)标准输入输出:
设备:键盘
设备文件名:/dev/stdin
文件描述符:0
类型:标准输入

设备:显示器
设备文件名:/dev/stdout
文件描述符:1
类型:标准输出

设备:显示器
设备文件名:/dev/stderr
文件描述符:2
类型:标准错误输出

2)输出重定向:即改变了输出方向,不再是输出到显示器

类型:标准输出重定向
符号:命令>文件
作用:已覆盖的方式,把命令的正确输出输出到指定的文件或设备中
符号:命令>>文件
作用:以追加的方式,把命令的正确输出输出到指定的文件或设备中

类型:标准错误输出重定向
符号:错误命令2>文件
作用:已覆盖的方式,把命令的错误输出输出到指定的文件或设备中
符号:错误命令2>>文件
作用:以追加的方式,把命令的错误输出输出到指定的文件或设备中

问题:由于正确命令和错误命令输出的符号不同,需要人为判断命令是否正确。

常用的是下面这种方法。
正确输出和错误输出同时保存
i.命令>文件 2>&1
//以覆盖的方式,将正确输出和错误输出都保存到一个文件(先把错误输出保存在正确输出里,然后把正确输出保存到指定文件中)

ii.命令>>文件 2>&1
//以追加的方式,将正确输出和错误输出都保存到一个文件

iii.命令&>文件
//以覆盖的方式,将正确输出和错误输出都保存到一个文件

iiii.命令&>文件
//以追加的方式,将正确输出和错误输出都保存到一个文件

iiii.命令>>文件1 2>>文件2
//把正确输出追加到文件1中,把错误输出追加到文件2中

3)输入重定向
wc [选项] [文件名]
-c 统计字节数
-w 统计单词数
-l 统计行数

6、多命令顺序执行与管道符

1、多命令顺序执行
命令1;命令2:多个命令顺序执行,命令之间没有任何逻辑联系
命令1&&命令2:逻辑与。如果命令1执行不正确,命令2不执行
命令1||命令2:逻辑或。如果命令1执行不正确,命令2才会执行。

应用范例:
dd if=输入文件 of=输出文件 bs=字节数 count=个数 //磁盘拷贝
if=输入文件 //指定源文件或源设备
of=输出文件 //指定目标文件或目标设备
bs=字节数 //指定一次输入/输出多少字节,即把这些字节看作一个数据块
count=个数 //指定输入/输出多少个数据块

date;dd if=/dev/zero of=/root/testfile bs=1k count=100000;date
//命令作用:检查创建一个100MB的文件需要多少时间

命令 && echo yes || echo no //判断命令是否正确  

2、管道符
命令1 | 命令2 //命令1的正确输出作为命令2的操作对象
范例:
ll -a /etc/ | more

netstat -an | grep "ESTABLISHED"

grep [选项] “搜索内容” 文件名
-i 忽略大小写
-n 输出行号
-v 反向查找
–color==auto 搜索出的关键字用颜色显示

7、通配符与其他特殊符号

1、通配符
? 匹配一个任意字符
*匹配0个或任意多个任意字符,也就是可以匹配任何内容
[] 匹配中括号中任意一个字符
例如:
[abc] 匹配a/b/c
[-] 匹配中括号中任意一个字符,-代表一个范围
例如:
[a-z] 匹配一个小写字母
[^] 逻辑非,表示匹配不是中括号内的一个字符
例如:
[^0-9] 表示匹配一个不是数字的字符

2、Bash中其他特殊符号
‘’ 单引号。在单引号中所有特殊符号,如" " " ‘ " ( 反 引 号 ) 都 没 有 特 殊 含 义 " " 双 引 号 。 在 双 引 号 中 特 殊 符 号 都 没 有 特 殊 含 义 , 但 是 " " "`"(反引号)都没有特殊含义 "" 双引号。在双引号中特殊符号都没有特殊含义,但是" """()"""""`""“除外,拥有"调用变量的值”“引用命令”"转义符"的特殊含义

范例:
name=sc
echo '$name'
echo "$name"

`` 反引号。反引号括起来的内容是系统命令,在Bash中会先执行它。但推荐使用$(),因为反引号很容易看成单引号。
$() 用来引用系统命令

#在Shell脚本中,#开头的行表示注释
$ 用于调用变量的值
\ 转义符,跟在\之后的特殊符号将失去特殊含义,变为普通字符。

Bash的变量

变量分类:
用户自定义变量
环境变量
位置参数变量
预定义变量

set命令可以查看系统所有变量
unset命令可以用来删除变量
1、用户自定义变量/本地变量

变量名称可以由字母、数字和下划线组成,但是不能由数字开头。
在Bash中,变量的默认类型都是字符串型,如果要进行数值运算,则必须指定变量类型为数值型。
变量用等号连接值,等号两侧不能有空格。
变量的值如果有空格,需要使用单引号或者双引号包括。
在变量的值中,可以使用"";转义符。
如果需要增加变量的值,那么可以进行变量值的叠加。不过变量需要用双引号包含" 变 量 名 " 或 者 用 变量名"或者用 "{变量名}包含。
如果是把命令的结果作为变量值赋予变量,则需要使用反引号或者$()包含命令。
环境变量名建议大写,便于区分。

2、环境变量
export 变量名=变量值 //声明变量
env查看环境变量
unset 删除变量
pstree进程树

常见环境变量
PATH:系统查找命令的路径
PATH="$PATH":/root/sh //PATH变量叠加
PS1:定义系统提示符的变量

3、位置参数变量

$n n为数字,$0表示命令本身,$1- 9 代 表 第 一 到 第 九 个 参 数 , 十 以 上 的 参 数 需 要 用 大 括 号 包 含 , 如 9代表第一到第九个参数,十以上的参数需要用大括号包含,如 9{10}
∗ 代 表 命 令 行 中 所 有 的 参 数 , * 代表命令行中所有的参数, *把所有的参数看成一个整体
$@ 也代表命令行中的所有参数,不过是把每个参数区分对待
$# 代表命令行中的所有参数的个数

#! /bin/bash
for i in "$*" # $*中的所有参数看成一个整体,所以这个for循环只会循环一次
    do 
        echo "The parameters are $i"
    done
x=1
for y in "$@" #$@中的每个参数都看成独立的,所以"$@"中有几个参数就会循环几次
    do
        echo "The parameter$x is: $y"
        x=$(($x+1))
    done
4、预定义变量

$? 最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值非0,则证明上一个命令执行不正确。

$$ 当前进程的进程号(PID)
$! 后台运行的最后一个进程的进程号

接受键盘输入:
read [选项] [变量名]
-p “提示信息” :在等待read输入时,输出提示信息
-t 秒数 :read命令会一直等待用户输入,使用此选项可以指定等待时间
-n 字符数 :read命令只接受指定的字符数,就会执行
-s :隐藏输入的数据,使用手机密码信息的输入

#! /bin/bash
read -t 30 -p "Please input your name:" name
echo "Name is $name "

read -s -t 30 -p "Please enter your age: " age
echo -e "\n"
echo "Age is $age"

read -n 1 -t 30 -p "Please select your gender[M/F]: " gender
echo -e "\n"
echo "Sex is $gender"

Bash的运算符

1、数值运算与运算符
命令:declare 声明变量类型
declare [+/-][选项] 变量名
-: 给变量设定类型属性
+: 取消变量的类型属性
-i: 将变量声明为整数型 integer
-x: 将变量声明为环境变量
-p: 显示指定变量的被声明的类型

数值运算 法一:
aa=11
bb=22
declare -i cc= a a + aa+ aa+bb

法二:
aa=11
bb=22
dd=$(expr $aa + $bb)) #dd的值是aa和bb的和。注意加号左右两侧必须有空格

法三:$((运算式)) 或 [ 运 算 式 ] a a = 11 b b = 22 f f = [运算式] aa=11 bb=22 ff= []aa=11bb=22ff=(( a a + aa+ aa+bb ))
gg=$[ a a + aa+ aa+bb ]

运算符说明 略

2、变量测试与内容替换

环境变量配置文件

1、source 命令
source 配置文件
. 配置文件

环境变量配置文件中主要是定义对系统的操作环境生效的系统默认环境变量,比如PATH、HISTSIZE、PSI、HOSTHOME等。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值