Linux相关
/proc/$PID:表示进程的文件/dev/null:垃圾箱,黑洞
shell内部构造
- 变量:变量分为:局部变量,环境变量,shell变量。
- shell变量:一部分是局部变量,一部分是环境变量,对shell很重要。比如:
IFS,PS1是局部shell变量 - 环境变量使用
export进行导出,环境变量可以让子进程继承
- shell变量:一部分是局部变量,一部分是环境变量,对shell很重要。比如:
.bashrc:在每次创建bash进程时会执行一次- 标准输入输出以及对应的文件描述符:
stdin-0,stdout-1,stderr-2。
bash
特殊符号总结
反引号:子shell,若要获得值,直接var=`command`即可。单引号:字符串,原样双引号:字符串,支持转义字符和变量[]:算术运算[[]]:是[]在用作条件运算时的扩展{}:将变量和周围的字符串隔离开来,如echo "some strange ${Java}Script"()- 子shell:
(ls)或var=$(ls) - 数组:
array=(1 2 3)
- 子shell:
(()):算术运算$:表示取出变量的内容,直接取出变量的值相当于执行命令var=(expr 3 + 4); $var;
语句格式
#:注释::空语句- 一般语句没有分号要求
变量
- 声明:等号前后不能有空格:
var="acc" - 读取:
echo ${var} - 删除变量:
unset var - 只读变量
字符串
- 单引号:原样打印:
var='test_acc' - 双引号:计算变量:
acc="aod ${var}" - 获得字符串长度:
echo ${#var} - 单个字符查找:需要借助
expr:echo `expr index ${var} char` - 子串:
echo ${str:start:length} - 还有很多字符串操作,截取等
# ## % %%
数组
- 数组元素可以为空,元素类型可以不同
- 定义数组
array_1=(1 2 3); # 整体 array_2[1]=23; # 分开来 array_3=( # 支持换行 1 2 ) - 数组操作
- 获得某个元素:
echo ${array[index]} - 获得所有元素:
echo ${array[*/@]}。 - 获得元素数量:
echo ${#array[*/@]} - 获取所有索引:
echo ${!array[*/@]}。(对于散列数组很有用)
- 获得某个元素:
- 关联(散列)数组:需要先声明
declare -A array_hash array_hash=([a]=aa [b]=bb); array_hash[c]=cc;
运算
- 算术运算:不推荐使用原生算术运算
- 算术运算:子shell + 命令的方法。(expr必须有严格的空格,因为空格区分参数)
var=$(expr 5 + 4); var=`expr 5 + 4` - 整数关系运算:只能用于判断语句中,空格要求
-eq,-ne,gt,lt,ge,le,-a,-o
if [[ 23 -eq 24 -o 24 -eq 34 ]]; ... - 字符关系运算
=,!=,-z,-n
if [[ "acc" = "bibi" ]]; ... - 文件关系运算符
- 是否存在,是否是符号连接,是否是目录,是否是块设备,等等等
- 可以使用
test指令进行判断,可用于if中
命令参数
$x特殊变量。可用于终端,脚本,函数- - - - - - $0名称 $n参数 $$PID $#参数数量 $*所有参数 $@所有参数 $?退出状态
函数
- 一般格式,可以不用换行
[function] func_name[()] { action; [return int;] }
条件控制
- if
if [[ $(ps -ef | grep -c "sh") -gt 1 ]]; then echo "sh than 1"; elif [[ $(ps -ef | grep -c "sh") -lt 1 ]]; then echo "sh not than 1"; fi - case:采用模式进行匹配,使用
;;作为终止,使用*作为默认。用于字符串模式匹配时,不要引号case $name in *saku*) echo "1"; ;; *) echo "2"; ;; esac
循环控制
- for
for var in item1 ... itemN; do action; done - while,支持
break与continuewhile condition; do action; done - until
until condition; do action; done
输入输出重定向
n>,n<:将一个文件重定向到另一个文件。n表示文件描述符,0是stdin,1是stdout,2是stderr>>表示将输出追加到文件末尾n>& m表示将输出文件n合并到输出文件m。两者都是文件描述符
- 当使用
command > file时实际发生了:command输出到stdout,stdout重定向到file |:管道运算符:将标准输出重新作为标准输入<<tag:表示将标记之间的内容作为输入
# 将stderr合并到stdout,将stdout输出到文件中。顺序不能改变
ls + . > file 2>&1;
# 将stdout输出到file1,将stderr输出到file2
ls + . >file1 2>file2;
# 将整个作为grep命令的输入,可以理解为替代管道符号 |
grep s <<!
not s
yes
is s
!
文件包含
. file或source file:将文件包含到当前文件中。
#命令
*/bin命令
tr:替换字符串:cat /proc/$PID/environ | tr "\0" "\n"tee:将标准输入一方面输入到文件,另一方面到标准输出echo "string" | tee file1.txt file2.txt | catsort:对行进行排序sort file.txt; cat file.txt | sort;cat:读取显示文件。# 拼接标准输入 echo "some text" | cat - file; echo "some text" | cat /dev/stdin file;echo:printf:用法同C语言pgrep:得到符合模式字符串的PIDexpr- 四则运算(
+,-,\*,/,%,=)只支持整数。注:乘号需要转义 - 比较运算(
==,!=)还支持字符串
- 四则运算(
read:获取键盘输入,可以直接将结果存在变量中:read resultfind:会递归寻找给定目录下的所有文件find . \( -name "*.sh" -o -name "*.py" \) -printxargs:可用于将标准输入的内容格式化;也可用于将标准输入作为命令的参数;echo "/dev" | xargs ls; # v echo "/dev" | ls; # xmd5sum:文件校验和split:文件分割
bash内命令
aliasunalias:别名。别名是暂时的,可以将操作追加到.bashrc使别名在每个终端生效。echo 'alias install="sudo apt install"' >> ~.bashrc
本文围绕Linux下的bash shell展开,介绍了shell内部构造、变量、字符串、数组等基础知识,涵盖算术、关系运算,以及条件、循环控制语句。还提及输入输出重定向、文件包含,同时列举了*/bin命令和bash内命令的使用方法。

1435

被折叠的 条评论
为什么被折叠?



