Shell 基础

Shell 是指是一个用 C 语言编写的程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。

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

一、Shell 脚本(Shell Script

shell脚本就是由Shell命令组成的执行文件,可以加入一些逻辑操作(if else for),将一些命令整合到一个文件中,进行处理业务逻辑,脚本不用编译即可运行。它通过解释器解释运行,所以速度相对来说比较慢。

- 查看当前系统的shell类型

echo $SHELL

>/bin/bash

- 查看当前系统环境支持的shell

[root@linux-node1 ~]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash

Shell 环境变量

$PATH

[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/jdk1.8.0_144/bin:/usr/local/jdk1.8.0_144/jre/bin:/root/bin

1.1 脚本格式

#!/bin/bash #首行,指定解析Shell 命令的命令解析器
# 如果首行不写,使用默认 /bin/sh

注释:
1 单行注释:#开头
2 多行注释::<<字符 … 字符(将字符们作为输入重定向到啥都不干)

1.2 脚本的执行

- 加权限

chmod a+x xx.sh
或者
chmod u+x xx.sh
./xx.sh (启动子bash(名字叫脚本名),在子bash中执行脚本内命令)
或者
sh xx.sh #很少用 (启动子bash,在子bash中执行脚本内命令)
或者
source xx.sh #(不启动子进程,直接在当前环境运行脚本内命令)

- 开发规范

1 不要中文注释
2 成对内容一次性写
3 缩进(风格类似go)

1.3 变量

1.3.1 普通变量(本地变量)

只能在当前进程中使用

1, 变量名=变量值(不可以有特殊字符)
2,变量名=‘变量值’ (原封不动输出)
3,变量名=“变量值” (变量套变量)

#定义完成,必须要赋值,=前后不能有空格
# tmp = 666 和 tmp == 666 等价
tmp=666 # 默认以字符串处理

1.3.2 环境变量

一般大写
可以理解为全局变量(针对当前操作系统)

- 系统自带的

– PWD
– SHELL

- 用户自定义的

将普通变量变成环境变量

GOPATH=/home/xxx/golang/  #普通环境变量

set GOPATH=/home/xxx/golang/ # 系统环境变量
export GOPATH=/home/xxx/golang/

~/.bashrc # 针对当前用户生效

/etc/profile # 设置环境变量,对整个操作系统下所有用户生效

1.3.3 位置变量

执行脚本的时候,可以给脚本传递参数,在脚本内部接收这些参数

$0: 脚本文件的名字
$1: 第一个参数
$2: 第二个参数

1.3.4 特殊变量

$#: 获取传递的参数个数
$@: 给脚本传递的所有参数
$?:上一条命令的返回值(0代表成功,非0代表失败)
(若上一条命令是执行脚本—>获取脚本最后一条命令的返回值)
直接在终端:echo $?(上一条命令的执行状态)
$$:执行脚本的进程号

1.3.5 命令变量

取命令执行之后的结果值。

定义方式一: 变量名=`命令` 注意:`是反引号
定义方式二: 变量名=$(命令)

命令变量值只在定义时确定,不会随着后续命令输出的改变而改变

变量访问

普通变量取值

1、$变量名
2${变量名} #(限定变量名范围)
3"$变量名" (变量值作为字符串)
4、标准使用方式 "${变量名}" (最推荐)

unset 变量名

字符串截取
${变量名:起始位置:截取长度}
echo ${a:0-3:2} (从倒数第三个开始截取,向后截取2个字符)
默认值:
${变量名:-默认值} (变量值存在则输出变量值,不存在则输出默认值)
${变量名:+提示信息} (变量存在则输出提示信息)

二、常用 Shell 命令

2.1 which

显示 shell 命令的完整路径

which [options] [--] programname [...]

2.2 echo

显示一行文本

echo [SHORT-OPTION]... [STRING]...
echo LONG-OPTION

Echo the STRING(s) to standard output.

-n do not output the trailing newline

2.3 env

在修改过的环境中运行一个程序

env [OPTION]... [-] [NAME=VALUE]... [COMMAND [ARG]...]

在环境中将每个NAME设置为VALUE并运行COMMAND。

不加任何参数,列出当前终端的环境变量

2.4 wget

2.5 curl

curl是一个使用支持的协议(DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTP, TELNET和TFTP)从服务器传输数据或向服务器传输数据的工具。该命令被设计成在没有用户交互的情况下工作。

curl提供了大量有用的技巧,如代理支持、用户认证、FTP上传、HTTP发布、SSL连接、cookie、文件传输恢复、Metalink等。

Curl由 libcurl 提供所有与传输相关的功能。
curl [options] [URL...]

-F, --form <name=content>
(HTTP) 这允许curl 模拟用户按了提交按钮的已填入的表单。这将导致 curl 根据RFC 2388 使用 Content-Type multipart/form-data POST数据。这允许上传二进制文件等。
要将“content”部分强制为文件,请在文件名前面加上@符号。
要从文件中获取内容部分,请在文件名前加上符号<
@和<的区别在于,@使一个文件作为文件上传附加到post中,而<使一个文本字段,并仅从文件中获取该文本字段的内容。

-X, --request <command>
(HTTP)与HTTP服务器通信时使用的自定义请求方法

-H, --header <header>
(HTTP)获取网页时使用的额外 header。您可以指定任意数量的额外header。

curl -H "rate:300" -H "domain:music" 127.0.0.1:8080/

2.6 usermod

usermod命令修改系统帐户文件,以反映在命令行上指定的更改。

usermod [options] LOGIN

-a, --append 将用户添加到补充组(supplementary group(s))。仅与-G选项一起使用。
-G, --groups GROUP1[,GROUP2,...[,GROUPN]]] 补充组列表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值