Linux基础知识(二)

Shell

在这里插入图片描述
shell是一个命令行解释器,用于接收应用用户或程序的命令。

解析器有:/bin/sh和/bin/bash,sh时bash的一个软件连接,默认为bash,在开头写#!/bin/bash,指定解析器,像include一样。

Bash shell是Linux默认的shell,bash会将输入过的命令记录到~/.bash_history中,可以直接通过history查看,还可以通过上下键找到输入过的命令, 可以通过type查看是否为内置命令。

变量

规则

  • 使用一个定义过的变量,只要在变量名前面加$即可。
  • 双引号里可以有变量。
  • 双引号里可以出现转义字符。
  • 单引号里的任何字符都会原样输出,单引号不会识别变量。
    在这里插入图片描述

系统变量

  • $PATH:环境变量,shell会到对于的路径下寻找命令或程序,通过修改/etc/profile.d可以添加自定义的环境到PATH。
  • $HOME:当前用户的HOME目录。
  • $SHELL :shell解析器路径。
  • $LANG。

自定义变量

  • 变量名=变量值,不能有空格。
  • unset 变量名,删除变量。
  • readonly 静态变量,不能改变删除。

特殊符号

  • $ 美元符代表目前shell的PID,可以通过echo $$ 来显示当前shell的PID。
  • ? 返回上个命令的返回值,执行成功就是0,不成功是非0。
  • \ 通过反斜杠转义,反斜杠后按enter键就可以继续输入命令。
  • 更多可以参考:添加链接描述

特殊变量

  • $n:$0脚本名称 $1-$9为参数。
  • $#:参数个数。
  • $*:获取全部参数,一次性全部获取,相当于[ “$1$2$3” ]。
  • $@:获取全部参数,一个一个获取,相当于 [ “$1” “$2” “$3” ]。
  • $?:最后一次命令的返回状态,0正确执行,非0 错误(具体数值可以自己设定)。

export

自定义变量可以理解为局部变量,系统变量可以理解为全局变量,在获得一个bash后,再开启另一个bash时,这个bash就是子进程,而第一个bash是父进程,子进程会获取父进程的系统变量,而不会获取自定义变量。

export 变量名 #可以将自定义变量设置为环境变量。

declare、typeset
都是声明变量类型。

declare [-aixr] variable
-a: array
-i: integer
-x: export
-r: readonly

数组

${数组名[下标]} ,如valuen=${array_name[n]}
echo ${array_name[@]} @可以获取所有元素
# 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得数组单个元素的长度
lengthn=${#array_name[n]}

管道和重定向

在这里插入图片描述
stdout:standard output,stderr:standard error output,两者都是将信息输出到屏幕上,stdout用于输出正确的信息,stderr输出错误的。

> 输出重定向:将输出信息被重定向到指定的地方。比如date命令会显示出时间,而如果使用date > time.txt 就会将显示的时间重定向到文件中,而不会显示出来了,再比如mkdir默认下是没有提示信息的,使用-v显示信息,mkdir -v 文件名

在这里插入图片描述
当不想看见错误信息时,可以 2> /dev/null,/dev/null就像是一个黑洞,这样就不显示信息出来。

stdin 代码为0 使用< or <<
stdout 1 > or >>
stderr 2 2> or 2>>
> 覆盖写,>> 以append的方式写入。
这样就可以将不同的数据区分开来。
列:find /home -name .bashrc > list_right 2> list_error #错误的信息会写入error,正确的写入right。
当需要将两种信息写在一起时,使用 &> 或者 2>&1

stdin:标准输入,由文件或者用户输入。

< 输入重定向:通过 < 可以将文件的内容作为输入内容。<< 表示结束的输入字符,比如
在这里插入图片描述
; && ||

  • command;command: 通过;可以依次执行多个命令。
  • command1&&command2:&&与,cmd1正确就执行cmd2,若cmd1错误,就不执行cmd2(与短路)。
  • cmd1||cmd2:或||,cmd1正确就不会执行cmd2,cmd1错误就执行cmd2(或短路)。

管道pipe
在这里插入图片描述
管道只能处理前面一个命令传来的正确信息,也就是stdout。

执行方式

一共三种:
./name.sh
sh name.sh
source name.sh
通过 . 和 sh都是直接执行,这样会开启一个bash子进程。而通过source会任然在原本的bash内执行。

常用命令

cut、grep

cut -d 分隔字符 -f 取第几段
cut -c 以char为单位,取出固定字符区间

在这里插入图片描述在这里插入图片描述

grep [-acinv] '查找字符' filename
-a:将二进制文件以文本文件的方式查找
-c:统计找到字符的次数
-i:忽略大小写
-n:显示行号
-v:反向选择
--color==auto:显示颜色

在这里插入图片描述
sort、uniq、wc

sort [选项] [filename/stdin]
-f:忽略大小写
-b:忽略前面的空格
-r:反向排序
-n:使用纯数字排序,默认使用文字
-u:相同数据,只出现一行
-t:分隔符,默认是tab
-k:指定根据那个区域排序

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

uniq [-ic] #将重复行只显示一个
-i:忽略大小写
-c:计数
wc [-lwm]
-l:仅列出行
-w:仅列出多少字
-m:多少字符

tee
在这里插入图片描述
双向重定位,使用tee可以将数据流分流到文件与屏幕,这样可以在分析文件时,还可以用于处理的记录。
在这里插入图片描述
在这里插入图片描述
xargs
xargs可以读入stdin的数据,以空格符、换行符将数据分隔成为参数,因此在处理一些有空格的文件名时,会发生误判。

xargs [-0epn] command
-0:当stdin中含有特殊字符时,会将其还原为普通字符
-e:EOF,后面接字符,当读取到这个字符时就会停止
-p:在每次执行命令时都会询问
-n:接次数,每次执行command时,要使用几个参数

在这里插入图片描述
在这里插入图片描述
sh

使用sh可以在不用直接运行脚本的情况下,测试脚本是否能够正常工作

sh [-nvx] name.sh
-n:不执行,仅查询语法问题
-v:在执行前,将内容输出到屏幕上
-x:将使用到的脚本显示

read

从键盘读取用户输入。

read [-pt] variable
-p: promot提示
-t: 等待的秒数,若超时read命令就会自动省略
-s: slient 没有显示,如在输密码时

条件判断、流程控制、函数

[ condition ]:条件判断符,两端必须要用空格隔开。括号内的变量最好用双引号。括号内每个组件用空格隔开。

name= "test"
[ ${name} ] [ "${name}" ] 两者不一样,第一种是 test 第二种是 "test"

在这里插入图片描述
流程控制:

if[ condition ]
then
  程序
fi

------------------------------------

if[]
then
   程序
else
   程序
fi

------------------------------------

if[]
then
    程序
elif[]
then
    程序
else
    程序
fi

------------------------------------

case $变量名 in
变量值1)
           程序
         ;;               //结束
变量值2)
           程序
         ;;               //结束

     *)                   //相当于default
           程序
         ;;
esac   //整个cased的结束

------------------------------------

for var in con1 con2 con3  //第一次循var为con1,第二次con2,第三次con3
do 
    程序
done

-------------------------------------

for ((初始值;循环条件;变量变化))  //类似java for
do
    程序
done

-------------------------------------

while [ condition ]
do 
    程序
done

函数:

function name() {    程序}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值