Shell基础

创建shell文件

vi hello.sh

或者

gedit hello.sh

执行shell脚本语言

chmod 755 hello.sh
绝对路径/./hello.sh

bash hello.sh

小注意点:shell脚本开头必须是#!/bin/bash,有点类似于Html开头<!DOCTYPE>

历史命令

格式: history [选项][历史命令保存文件]
-c 清空历史命令
-w 把缓存中的历史命令写入历史命令保存文件**~/.bash_history**(CTF小考点)
.bash_history默认保存1000条历史命令。

命令别名

临时生效:
格式: alias 别名=‘原命令’

alias vi=‘vim’

永久生效
修改root/.bashrc

vi /root/.bashrc

命令执行时顺序

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

bash快捷键

Ctrl + a :移到命令行首
Ctrl + e :移到命令行尾
Ctrl + f :按字符前移(右向)
Ctrl + b :按字符后移(左向)
Alt + f :按单词前移(右向)
Alt + b :按单词后移(左向)
Ctrl + xx:在命令行首和光标之间移动
Ctrl + u :从光标处删除至命令行首
Ctrl + k :从光标处删除至命令行尾
Ctrl + w :从光标处删除至字首
Alt + d :从光标处删除至字尾
Ctrl + d :删除光标处的字符
Ctrl + h :删除光标前的字符
Ctrl + y :粘贴至光标后
Alt + c :从光标处更改为首字母大写的单词
Alt + u :从光标处更改为全部大写的单词
Alt + l :从光标处更改为全部小写的单词
Ctrl + t :交换光标处和之前的字符
Alt + t :交换光标处和之前的单词
Alt + Backspace:与 Ctrl + w 相同类似,分隔符有些差别

输出重定向
类型符号作用
标准输出重定向命令>文件以覆盖(覆盖原文件的内容)的方式将命令的正确输出输出到指定的文件或设备中
命令>>文件以追加的方式将命令的正确输出输出到指定的文件或设备中
标准错误输出重定向错误命令 2>文件以覆盖的方式将命令的错误输出输出到指定的文件或设备中
错误命令2>>文件以追加的方式将命令的错误输出输出到指定的文件或设备中
正确输出和错误输出同时保存命令 > 文件 2>&1或者 命令 &> 文件以覆盖得方式,把正确输出和错误输出都保存到同一个文件中
命令>> 文件 2>&1或者 命令 &>>文件以追加得方式,把正确输出和错误输出都保存到同一个文件中
命令>>文件1 2>>文件2把正确得输出追加到文件1中,错误的输出追加到文件2中
多命令顺序执行
多命令执行符格式作用
命令1;命令2多个命令顺序执行,命令之间没有任何逻辑关系
&&命令1&&命令2逻辑与,命令1正确时命令2才会执行
||命令1||命令2逻辑或,命令1不正确时命令2才会执行

例:

date;dd if=dev/zero of=~/testfile bs=1k count=100000;date

该命令从dev/zero中读取100000个1k个0(100M),写入到~下的testfile中,先执行左边的date,后执行dd命令,最后执行右边date,可用来计算复制100M字节所需的时间。

命令&& echo yes || echo no

命令执行成功,输出yes,命令执行不成功,输出no。

管道符

**格式:**命令1 | 命令2

命令1的正确输出作为命令2的操作对象
例:

ll-a /etc|more

ll查看/etc下的文件,作为more的操作对象

netstat -an | grep ESTABLISHED

查看计算机当前的服务器的连接。
grep
格式: grep [选项] ”搜索内容“ [文件]
选项:
-i:忽略大小写
-n:输出行号
-v:反向查找
–color=auto 搜索出的关键字用颜色显示

通配符
通配符作用
?匹配一个任意字符
*匹配0个或任意多个字符
[]匹配括号中的任意一个字符
[-]匹配括号中的范围的任意一个字符,例:[a-z]匹配所有小写字母
[^]匹配不在括号中的任意一个字符,例:[ ^0-9]匹配所有除数字以外的字符。
特殊符号
符号作用
‘ ’单引号。在单引号的所有特殊符号,如“$”、" ` "(反引号),都没有特殊含义
“ ”双引号。双引号中的特殊字符具有特殊含义,如"$"、"·"、“ $()”
$()引用系统命令
· ·反引号,引用系统命令
#注释
$调用变量的值
\转义字符
环境变量配置文件
系统环境变量配置文件

/etc/profile:系统第一个加载的配置文件
/etc/profile.d/*.sh
/etc/bashrc:系统配置别名的配置文件
参考:
https://blog.csdn.net/u011479200/article/details/86501366

环境变量

$PATH :系统查找命令的路径
在这里插入图片描述
例:ls,ls命令执行时,先去/home/hhh/bin下查找该命令,若没有则继续向后查找,查找完所有PATH路径之后还没有查找到命令,则报错。
(待更新)
HISTSIZE:指定history中存储的指令的数量,默认为100

位置变量参数
位置变量参数作用
$nn为数字,$0代表命令本身,$1- 9 代 表 第 一 到 第 九 个 参 数 , 10 以 上 带 括 号 , 如 9代表第一到第九个参数,10以上带括号,如 910{10}
$*代表命令行中所有参数, $*把所以参数看做一个整体
$@代表命令行中所有参数,$@把所以参数区别对待
$#代表命令行中所有参数的个数

例:

#!/bin/bash

# 测试位置参数变量

echo " 输入的命令:$0  "
echo " 第一个参数:$1 " 
echo " 第二个参数:$2 "
echo " 第三个参数:$3"

echo " 输入的参数: $*"
#使用$*输出所有参数
echo " 输入的参数: $@"
#使用$@输出所有参数
echo " 输入的参数个数:$#" 

测试:
在这里插入图片描述
区分 ∗ 和 *和 @:

#!/bin/bash
#区分$*和$@

for i in "$*"
	do 
		echo "输入的参数为: $i"
	done

x=1
for y in "$@"
        do 
		echo " 输入的第$x个参数为:$y"
		x=$(($x+1))
	done

输出结果,可以看到 ∗ 将 所 有 参 数 作 为 一 个 整 体 , f o r 循 环 只 循 环 了 1 次 , *将所有参数作为一个整体,for循环只循环了1次, for1@则区别对待每一个参数,为每一个参数循环了一个。
在这里插入图片描述

预定义变量
预定义变量作用
$?返回上一条指令的执行结果,如果上一条命令执行正确,返回0,否则返回非0,具体数值由命令具体错误来指定
$$当前进程的进程号PID
$!后台运行的最后一个进程的进程号PID
#!/bin/bash

# 测试进程号PID
echo "当前脚本的进程号:$$"


find ~/ -name test.sh &
# &代表后台执行

echo "后台运行的最后一个进程PID:$!"

测试结果:
在这里插入图片描述

接收键盘输入

read
格式: read [选项][变量名]
选项:
-p “提示信息” :在等待read输入时,输出提示信息
-t 秒数(以s为单位):指定等待时间
-n 字符数 :指定接收的字符数
-s :隐藏输入的数据

例:

#!/bin/bash
#test input 

read -p "输入你的名字: " name
echo -e "\n"
echo "你输入的名字:  $name" 
read -s -t 20 -p "输入你的年龄:" age
echo -e "\n"
echo "你输入的年龄是: $age"

read -n 1 -p "输出你的性别(m/f): " sex
echo -e "\n"
echo "你输入的年龄是: $sex"

在这里插入图片描述

数值运算

declare:声明变量类型
格式: declare [+/-] [选项] 变量名
选项:
- :给变量设定类型属性
+:取消变量的类型属性
-i :将变量声明为整数型
-x :将变量声明为环境变量
-p :显示指定变量的被声明的类型
数值运算格式:$(())
例:

a=1
b=2
c= a + a+ a+b #c=1+2 原因时shell中默认类型为字符串类型
c= ( ( (( ((a+$b)) #c=3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值