写着写着,,发现自己会用md了,就在下面使用了各级标题。
本来是有图片的,但是md的直接复制过来还得重新上传图片。。。以后就会直接粘贴命令了,图片可有可无。
1、打印全局变量使用:printenv,查看某一个全局变量的值使用echo $name
显示环境变量则需要$,如果需要操作环境变量则不需要加
2、设置全局环境变量(export 命令):
只需要将程序所在的目录加入到path路径下即可。
可以先切换到该文件所在的目录,然后直接后面跟上:.即可
3、shell会从以下五个文件中读取命令
/etc/profile
$HOME/.bash_profile
$HOME/.bashrc
$HOME/.bash_login
$HOME/.profile
4、vim命令学习:
普通模式下:
h:左移一个字符
j:下移一行
k:上移一行
l:右移一个字符
PageDown(ctrl +F):下移一屏
PageUp(Ctrl + B) :上移一屏
G:最后一行
num G:移动到第num行
gg:第一行
命令行模式下:
w filename:保存到另一个文件中
编辑命令
x:删除光标所在地的字符
dd:删除当前光标所在行
dw:删除光标所在位置的单词
d$:删除当前光标所在位置至行尾的内容
J:删除当前光标所在行行尾的换行符
u:撤销前一个编辑命令
a:在当前光标后追加数据
A:在当前光标所在行行尾追加数据
r char:用char代替当前光标所在位置的字符
R text:用text覆盖当前光标所在位置的数据,直到按下ESC键
复制粘贴命令:
y命令结合d后的字母,可以实现复制,然后将光标移动到需要粘贴的地方使用p命令即可完成粘贴操作
查找替换命令:
使用/进行查找内容
使用:s/old/new/进行替换内容 一行
其余格式
:s/old/new/g :一行内替换全部
:n,ms/old/new/g :替换行n至m内的所有对象
:%s/old/new/g : 替换文件内的所有对象
:%s/old/new/gc:替换全部,但是每次替换均提示
#!/bin/bash
date
who
1、若有单引号或者双引号要输出,则用双引号包住单引号,用单引号包住双引号
2、若要将其与输出处于同一行,则可以使用-n命令避免输出换行,在最末尾的地方需要加上一个空格
set命令可以查看完整的环境变量列表(确实完整,,一页放不下)
\,反斜线可以转义美元符号
#!/bin/bash
year=20
me=TedLau
echo "$me is $year "
~
~
使用反引号或者$()
#!/bin/bash
testing=`date`
echo "The date is : " $testing
am=$(date)
echo $am
格式化输出日期:date + %y+%m+%d
最基本的输出命令是将命令的输出发送到一个文件中。bash shell使用>来完成重定向输出
如date > 618,若原文件已存在内容,则会覆盖其内容
one single > will cover existing content
two > will retain the existing content
输入使用的是<
wc(word count) will output :line 、words count 、the bytes of the file
e.g.:wc < 618
wc << flag
Using flag to end input.
e.g.:
$wc << 618
> s
> ls
> 618
2 2 5
expr中的*号需要转义
ARG1 | ARG2
ARG1 if it is neither null nor 0, otherwise ARG2
ARG1 & ARG2
ARG1 if neither argument is null or 0, otherwise 0
ARG1 < ARG2
ARG1 is less than ARG2
ARG1 <= ARG2
ARG1 is less than or equal to ARG2
ARG1 = ARG2
ARG1 is equal to ARG2
ARG1 != ARG2
ARG1 is unequal to ARG2
ARG1 >= ARG2
ARG1 is greater than or equal to ARG2
ARG1 > ARG2
ARG1 is greater than ARG2
ARG1 + ARG2
arithmetic sum of ARG1 and ARG2
ARG1 - ARG2
arithmetic difference of ARG1 and ARG2
ARG1 * ARG2
arithmetic product of ARG1 and ARG2
ARG1 / ARG2
arithmetic quotient of ARG1 divided by ARG2
ARG1 % ARG2
arithmetic remainder of ARG1 divided by ARG2
STRING : REGEXP
anchored pattern match of REGEXP in STRING
match STRING REGEXP
same as STRING : REGEXP
substr STRING POS LENGTH
substring of STRING, POS counted from 1
index STRING CHARS
index in STRING where any CHARS is found, or 0
length STRING
length of STRING
方括号中的*号不需要转义,因为shell知道它在方括号内,就不是通配符
$var=$[1 + 5]
┌─[tedlau@parrot]─[~/Desktop/1]
└──╼ $echo $var2
7
┌─[tedlau@parrot]─[~/Desktop/1]
└──╼ $var2=$[$var * 7]
┌─[tedlau@parrot]─[~/Desktop/1]
└──╼ $echo $var2
42
┌─[tedlau@parrot]─[~/Desktop/1]
└──╼ $
#!/bin/bash
var1=100
var2=50
var3=45
var4=$[$var1 * ($var2 - $var3)]
echo Result is $var4
bash shell中只支持整数运算,小数会舍去,zsh已经可以进行浮点运算
可以在bash shell中简历计算器,简称bc
bc中需要设置scale的值,否则就无法运算小数
shell中可以直接使用,并且支持定义变量,如C语言一般
quit退出
#!/bin/bash
var1=$(echo "scale=55;23 / 43" |bc)
echo Result is $var1
~
多行的bc脚本,使用了内联重定向
#!/bin/bash
var1=1.23
var2=2.34
var3=1213.3
var4=89
var5=$(bc << EOF
scale = 10
a1 = ($var1 * $var2)
a2 = ($var3 + $var4)
a1+a2
EOF
)
echo The final result is $var5
┌─[tedlau@parrot]─[~/Desktop/1]
└──╼ $date
2020年 06月 18日 星期四 22:01:34 CST
┌─[tedlau@parrot]─[~/Desktop/1]
└──╼ $echo $?
0
─[✗]─[tedlau@parrot]─[~/Desktop/1]
└──╼ $asdasd
bash: asdasd:未找到命令
┌─[✗]─[tedlau@parrot]─[~/Desktop/1]
└──╼ $echo $?
127
$? :存放上个已执行过得命令的退出状态码
需要检查的命令,必须在运行完毕后就立刻查看其状态码
错误的返回一个正值
状态码 | 描述 |
---|---|
0 | 命令成功结束 |
1 | 通用未知错误 |
2 | 误用Shell命令 |
126 | 命令不可执行 |
127 | 没找到命令 |
128 | 无效退出参数 |
128+x | Linux信号x的严重错误 |
130 | 命令通过Ctrl+C控制码越界 |
255 | 退出码越界 |
shell脚本中的最后一个命令的退出状态为退出码
可以自定义退出码,使用exit命令
#!/bin/bash
var1=1.23
var2=2.34
var3=1213.3
var4=89
var5=$(bc << EOF
scale = 10
a1 = ($var1 * $var2)
a2 = ($var3 + $var4)
a1+a2
EOF
)
echo The final result is $var5
exit 666
┌─[tedlau@parrot]─[~/Desktop/1]
└──╼ $neilianbc
The final result is 1305.1782
┌─[✗]─[tedlau@parrot]─[~/Desktop/1]
└──╼ $echo $?
154
翻车了、、、、、、,最大值是255
#!/bin/bash 是shell的完整路径