shell学习笔记
本文最后更新于:2022年9月23日 下午
shell注意事项
重定向
标准输入文件,stdin文件描述符0
标准输出文件,stdout文件描述符1
标准错误文件,stderr文件描述符2
重定向到/dev/null文件=禁止输出(任何内容均丢弃)1
2
3
4
5
6
7
8
9
10# 将hello.txt文件中的内容传给cat ,然后再传给hello2.txt(覆盖原内容)
cat < hello.txt > hello2.txt
# 将hello.txt文件中的内容传给cat ,再追加给hello2.txt(不覆盖原内容)
cat < hello.txt >> hello2.txt
# 将错误信息重定向到文件
$ command 2>file
# 将错误信息和标准输出信息重定向到文件
$ command > file 2>&1let
指令无法使用,将开头的#!/bin/sh
换为#!/bin/bash
语法变量名和等号之间不能有空格
0代表true,1代表false
执行脚本
以下两种启动子shell执行脚本,执行完成后回到父shell,子shell可以使用父shell的变量
绝对/相对路径(需要x权限)
1 |
|
使用bash执行(不需要x权限)
1 |
|
使用source执行,不启动子shell
1 |
|
权限说明
符号 | d | - | l | r | w | x |
---|---|---|---|---|---|---|
含义 | 文件夹 | 文件 | 链接 | 可读 | 可写 | 可执行 |
- 第一个字符是类型,后每三个为一组,分别表示文件的拥有者,文件的所属组,文件的其他用户所拥有的权限
- 第一个yede表示拥有者,第二个为这个拥有者所在组
赋于执行权限
1 |
|
变量说明
export variable_name
将局部变量提升为全局变量(不需要$),子bash中的修改只对子bash有效set
包含所有系统和用户定义的全局变量、局部变量;
env
中是系统中的全局变量;
局部变量在子shell中无效readonly variable_name
设置变量只读1
2myUrl="https://www.google.com"
readonly myUrlunset variable_name
删除变量,测试之后需要及时删除以免占用内存,readonly
无法unset
1
unset variable_name
- 特殊变量
参数 含义 $# 参数个数 $* 所有参数,以”$1 $2 … $n”的形式输出所有参数 $@ 所有参数,以”$1”,”$2” … “$n” 的形式输出所有参数 $$ 脚本运行的当前进程ID号 $! 后台运行的最后一个进程的ID号 $? 最后命令的退出状态。0没有错误,其他值有错 - 字符串
单引号内任何字符都会原样输出,转义符无效;双引号里可以有变量,有转义字符;也可以不要引号 - 数组
定义方式array_name=(value0 value1 value2 value3),用空格分开1
2
3
4
5
6
7
8
9# 读取某一元素的值
valuen=${array_name[n]}
# @可以获取数组中的所有元素
echo ${array_name[@]}
# 取得数组元素的个数
length=${#array_name[@]}
length=${#array_name[*]}
# 取得数组单个元素的长度
lengthn=${#array_name[n]}
运算
- 使用
expr
完成计算 - 使用
$[]
或者$(())
- 关系运算符,使用如右
[ $a -eq $b ]
运算符 说明 -eq equal 相等 -ne not equal 不相等 -lt less than 小于 -le less equal 小于等于 -gt greater than 大于 -ge greater equal 大于等于 ! 非 -r or 或 -a and 与 - 逻辑运算符&& ,||可借此形成三元表达式
- 字符串运算符,文件测试运算符,不常用,见链接
示例
1 |
|
注意:
- 在
expr
表达式和运算符之间要有空格 - 条件表达式注意空格
[ 2 == 3 ]
(测试中主要是[]两侧的空格) - 表达式中的=可用于检测字符串是否相等,==检测
if,for,while,case,until语句
if
1 |
|
for
1 |
|
while
1 |
|
多选择语句
1 |
|
读取输入read
-t 指定等待时间,不加则一直等待
-p 指定提示语
1 |
|
函数
系统函数
basename获取当前文件名
dirname获取路径
1 |
|
注意:
return后的数值n(0-255)
字符串处理
字符串截取
1 |
|
指令
wc 统计文件信息
符号 含义 -l 统计行数 -m 统计字符数 -w 统计字数 -c 统计字节数 1
2
3
4# 统计3个文件的信息,输出分别表示行数、单词数、字节数
wc filename1 filename2 filename3
3 94 234 filename1
...uptime 获取服务器信息
1
2
3
4
5
6
7uptime
08:21:34 up 36 min, 2 users, load average: 0.00, 0.00, 0.00
#当前服务器时间: 08:21:34
#当前服务器运行时长 36 min
#当前用户数 2 users
#当前的负载均衡 load average 0.00, 0.00, 0.00,分别取1min,5min,15min的均值date 有关日期的指令
head
1
2# 查看第一行内容
head -1 filenametail
与head类似1
2# 查看最后一行内容
tail -1 filenamessh 远程连接
1
2# 连接远程服务器并执行以下指令
ssh user@公网ip "cd /home ; ./a.sh"
shell学习笔记
https://danmoliuhen.github.io./2022/08/23/shell_notes/