shell

shell

admin
10月7日发布

{ /etc/shells 文件查询Linux支持的shell

调用shell脚本标准方法使用路径运行,也可以通过bash调用脚本

echo -e 选项才可以识别反斜杠的控制字符,例如 \n \t

history用来查询历史命令,文件保存在 ~/.bash_history。 /etc/profile 文件的HISTSIZE可以设置历史命令保存条数

标准输出重定向:命令 > 文件(覆盖) 命令 >> 文件(追加)
标准错误输出重定向:命令 2> 文件 命令 2>> 文件
正确错误输出重定向保存到同一个文件:命令 &>> 文件
正确错误输出分别重定向到各自的文件:命令 >> 文件1 2>> 文件2

判断命令是否正确执行可以用:命令 && echo yes || echo no

wc 命令:-l 统计行数,-w 统计单词数,-c 统计字节数,-m统计字符数。默认 行,单词,字节

pstree查看进程树

单引号。在单引号中所有的特殊符号,如 $ 和 `` (反引号)都没有特殊含义。
双引号。在双引号中特殊符号都没有特殊含义,但是 $,`` 和 \ 是例外,拥有“调用变量的值”、“引用命令”和“转义符”的特殊含义。

( )小括号中的命令会新开一个子shell,在子shell中运行。运行完返回当前shell

{}大括号格式要求和左括号需要有空格,命令结束要有 ; 分号。 { name=test;echo $name;}

调用未定义的变量,默认显示空。定义变量为空,也会显示空,易混淆导致错误。可以用 set -u 命令临时设定,调用未声明的变量就会报错

环境变量使用 export 声明

环境变量查询 set 或者 env 命令

locale 命令查看系统当前语系,系统环境变量 LANG 配置文件位置 /etc/sysconfig/i18n

系统环境变量 PS1 在 /etc/bashrc

预定义变量:

$?:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果为非0(具体是哪个数,由命令自己来决定),则上一个命令执行不正确。
$$:当前进程的进程号(PID)
$!:后台运行的最后一个进程的进程号(PID)

预定义变量中的位置参数变量:

$n:n为数字,$0 代表命令本身,$1-$9 代表第一到第九个参数,十以上的参数需要用大括号包含,如${12}
$*:代表命令行中所有的参数,$* 把所有的参数看成一个整体
$@:也代表命令行中所有的参数,不过 $@ 把每个参数区分对待
$#:代表命令行中所有参数的个数

echo "'$*' is $":单引号中的没有特殊含义,但是此处整体还被双引号包括,所以还是会显示特殊含义。需要用转义字符 echo "$ is $*"

接收键盘输入:read 选项 变量名

-p "提示信息",等待输入时,输出提示信息
-t 秒数,指定等待时间
-n 字符数,只接受指定的字符数
-s,隐藏输入的数据
变量名可以自定义,如果不指定变量名,会把输入保存到默认变量REPLY。如果提供了一个以上的变量名,则输入分为若干项,一个接一个地赋予各个变量,最后一个变量取得剩余的所有字

declare声明变量类型:

声明数组变量 标准格式:declare -a array[0]="hello"    也可以直接写 array[0]="hello"。调用数组用 ${array[0]} 的方式,${array[*]} 为数组所有内容
declare -x 和 export 同为声明环境变量
+ 取消声明的类型,+i,+x 
-p 查询变量的声明类型
-r 将变量声明为只读变量。一旦设置为只读变量,既不能修改变量的值,也不能删除变量,甚至不能通过+r 取消只读属性

数值运算:shell默认变量为字符串型

a=1;b=2 直接声明c为整数型 declare -i c=$a+$b,就可以进行数值运算
默认字符串型进行数值运算可以用     (($a+$b)) 或 [$a+$b] ,用双小括号括起来,c=$(($a+$b)) 
c=$(expr $a + $b):expr是系统命令,用 $() 引用系统命令。使用时 + 号两侧必须有空格隔开
let c=$a+$b 或 let c=a+b,let的命令格式比较宽松

”source 配置文件“ ,同 “. 配置文件”,用于调用配置文件

. 配置文件

/etc/issue 本地登录前的欢迎信息
/etc/issue.net 远程登录前的欢迎信息,需要在 /etc/ssh/sshd_config 中打开
/etc/motd 正确登录后的欢迎信息,不管本地登录还是远程登录

正则表达式:

匹配所有内容,标准写法是 " .* ",当然任意字符加 * 都可以表示匹配所有内容,如" a* "。* 表示前一个字符匹配0次或任意多次
" ^$ " 匹配空白行,grep -v "^$" ,-v取反,可以匹配除空白行外的内容
grep " aaa* " txt ,匹配包含2个及2个以上a字符的内容
\{n, \} 表示前面的字符至少出现n次,egrep命令或grep -E 不需要加 \ 转义符
\{n\} 表示前面的字符恰好出现n次
\{n, m\} 表示前面的字符至少出现n次,最多m次

cut 提取列,默认用制表符分隔,不支持识别空格分隔

printf 在命令行中用单引号,在awk中为了区分用双引号

awk编程:awk '条件1{动作1} 条件2{动作2}...' 文件名

1、awk是一行一行地读的,依次把数据赋予$0,$1,$2等变量。$0代表此行的整体数据,$1代表第1字段,$2代表第2字段。
2、接着判断条件,如果条件成立则执行动作,否则读入下一行数据。如果没有条件,则每行都执行动作。
3、读入下一行数据,重复以上步骤。

awk默认以制表符或空格作为分隔符

$0代表当前读入行的整行数据
$n代表目前读入行的第n个字段
NR表示当前awk所处理的行,在总数据的第几行
NF表示当前行拥有的字段总数
FS用户定义分隔符,例 {FS=":"},用 : 作为分隔符

// 中写字符串或正则表达式,字符串必须用 // 包含,awk命令才能正确识别
awk '$2~/tg/ {print $6}' txt:第2字段包含“tg”字符串,则打印第6字段。此处 // 中是字符串
awk '/lm/ {print}' txt:包含lm,打印整行。此处 // 中是正则表达式

指定分隔符需要在此动作前加BEGIN
多个 条件{动作} 可以用空格分割,也可以用回车分割。
在一个动作中,如果需要执行多个命令,需要用 ; 分割,或用回车分割。
在 awk 中,变量的赋值与调用都不需要加入“$”符。
条件中判断两个值是否相同,使用 == ,以便和变量赋值进行区分。

awk函数的定义方法:
    function 函数名(参数列表) {
        函数体
    }
    
awk -f 调用awk脚本

sed [选项] '动作' 文件名:

选项:
    -n:一般 sed命令会把所有数据都输出到屏幕,如果加入此选择,则只会把经过 sed命令处理的行输出到屏幕。
    -e:允许对输入数据应用多条 sed 命令编辑。可以执行多个动作,之间用 ; 分隔或回车分隔
    -i:用 sed的修改结果直接修改读取数据的文件,而不是由屏幕输出
动作:
    a \ :追加,在当前行后添加一行或多行。添加多行时,除最后一行外,每行末尾需要用“\”代表数据未完结。
    c \ :行替换
    i \ :插入
    d:删除指定的行
    p:打印输出指定的行
    s:字符串替换

sort [选项] 文件名:默认用每行开头的第一个字符进行排序

-f:忽略大小写
-b:忽略每行前面的空白部分
-n:以数值型进行排序,默认使用字符串型排序
-r:反向排序删除重复行。就是 uniq 命令
-u:删除重复行。就是 uniq 命令
-t:指定分隔符,默认是分隔符是制表符
-k n[,m]:按照指定的字段范围排序。从第n字段开始,m字段结束(默认到行尾)

uniq [选项] 文件名:用于取消重复行,同 sort -u。-i 选项忽略大小写

条件判断:

test 命令 或者 用 [  ] 包含,中括号内部两边需要空格隔开。
引用变量一般都用双引号包含,"$var"
判断权限只能判断整个文件有没有某个权限,所有者 所属组 其他人 任意一个有权限就为真

if单分支条件判断:

if [ 条件判断式 ];then                                
    程序
fi
可以用 ; 分隔,也可以换行分隔
if [ 条件判断式 ]
    then                                
        程序
fi
    

双分支if条件语句:

if [ 条件判断式 ]
    then
        条件成立时执行的程序
    else
        条件不成立时执行的程序
fi
    

多分支if条件语句:

if [ 条件判断式1 ]
    then
        条件判断式1成立时,执行的程序1
elif [ 条件判断式2 ]
    then
        条件判断式2成立时,执行的程序2
elif [ 条件判断式3 ]
    then
        条件判断式3成立时,执行的程序3
...
else
    所有条件都不成立时,执行的程序
fi

多分支case条件语句:每个分支用双分号 ;; 结尾,表示该程序段结束

case $变量名 in
    "值1")
        变量的值等于值1,执行的程序1
        ;;
    "值2")
        变量的值等于值2,执行的程序2
        ;;
    ...
    *)
        如果都不是以上的值,则执行此程序
        ;;
esac

for循环:

for 变量 in 值1 值2 值3 ...
    do
        程序
    done
    
for (( 初始值;循环条件;变量变化 ))
    do
        程序
    done

while循环:

while [ 条件判断式 ]
    do
        程序
    done

until循环:条件不成立才进行循环

until [ 条件判断式 ]
    do
        程序
    done
    

成立等号要加1,不成立没等号要加1

函数:不支持形参,一般用位置参数变量。相当于定义了一个命令。add 10 20

function 函数名 () {
    程序
}

exit语句:直接退出脚本,返回值 $? 可以查看

exit 返回值

break语句:跳出当前整个循环
continue语句:跳过当前单次循环

喜欢就支持一下吧
点赞 1 分享 收藏
评论
所有页面的评论已关闭
SSL