linux shell

 

linux 系统管理基础

调试shell

 

sh -x test.sh

sh -v test.sh

 

在父shell中执行

source 

./test.sh

 

显示shell 层次

登录shell执行文件 

/etc/profile

$home/user/.bash_profile

$home/user/.bash_login

$home/user/.profile

按照文件顺序依次执行

 

新建一个子shell

读取

/etc/bash.bashrc

$home/user/bash.bashrc

 

sh文件调用顺序

执行login shell 

查看/etc/passwd 

/bin/sh

读取

/etc/.profile执行

读取

$home/user/.profile 执行

 

执行交互shell

/bin/sh

产生一个子shell

bash检查ENV,如果有变量 执行变量定义的配置文件

 

执行shell script 

在执行文件存在 #! /bin/sh

bash不会启动任何配置文件

 

cd 

pwd 

source

 

alias cp='cp -i'

 

unalias cp

 

umask

 

history

 

histfilesize

 

histsize

 

fc -l

列出登录shell后执行过度所有命令

 

type 测试命令

 

set 设定bash shell 属性

set -o 列出所有的属性

set -o 打开某个属性

set +o 关闭属性

 

read -a arr << (echo 12 43 33)

echo ${arr[2]}

exec 

 

eval 

 

who

cat

 

head

tail

 

wc 

 

ln

 

mkdir

rmdir 

 

rm

 

find

find 路径 样式 操作

 

ex

find / -name '*.txt'

 

find / -name '*.txt' print

 

tar cvzf etc.tgz /etc

 

tar zxvf etc.tgz

 

解压到指定的目录

tar -zxvf etc.tgz -C test

 

tar cvf  test2 | gzip -9 > save.tgz

 

gzip -9dc save.tgz | tar xvf -

 

basename

 

dirname

 

sort dataf4 升序排列 按照ascII排序 做大小比较

 

sort -r  dataf4 

 

sort -n dataf4 升序排列,以字符串的数值大小做为比较

 

sort -k 2 databaf5 字符串方式比较

 

sort -n +2 跳过第2第3个字段 以字符串的数值大小做为排序依据

 

unid

 

uniq dataf3 

注意事项:若重复列为连续摆在一起,则不会有任何作用

sort dataf3 | uniq 

删除dataf3 文件中的重复行

sort dataf3 | uniq -d 

挑选出重复行

 

sort dataf3 | uniq -c 统计重复行的行数

 

cut 对文件的每一个行抽出某一部分

cut -c2 dataf1 

截取 dataf1 文件中的每一个行的第2个字符

cut -c2-4 文件中的每一个行的第2到个字符

cut -c9- dataf1 文件中的每一个行的第9到最后个字符

cut -c2-3,22- dataf1

cut -d: -f1 /etc/passwd -d选项表示指定分割符

 

paste 对文件以行和行方式合并

 

paste dataf1 dataf2

 

paste -d'#' dataf1 dataf2 合并用#分开

 

paste -s dataf4 自己合并自己

默认用TAB分开

 

tr转换或者是删除字符

tr k K < dataf1 把文件中的小K 换成大K

 

tr ',' '\n'< 把,换成换行

 

tr -d k 删除晚间中的额K字符

 

cut -d: f1-6 /etc/passwd | tr:'+'

 

tr -s '''' <datef1

删除多余的空白只剩下一个

 

grep A*

 

grep -i A* 不区分大小写

 

grep -v La data3 不包含La显示出来

 

grep -l La* 显示包含La的文件,不显示符合的行

 

grep -n La*同上,但是现实行号

 

grep -q keyword filename 含有keyword 则返回0 否则返回非0

 

tee

tee -a

 

开启子shell 执行多个命令

(comand1;comand2)

 

在当前shell执行

{comand1,comand2}

 

shell ctrl + y 粘贴

ctrl + r 查找历史

Ctrl + n

Ctrl + p

 

shell

变量只有声明之后才能使用

shopt -s o nounset

 

declare 声明变量

unset -v 变量名  删除变量值

unset -f 函数名  删除函数

 

变量和引号

在双引号中可以做如下的操作

替换变量

提花命令执行结果

替换算数运算结果

 

\$var

在双引号中转义变量

export var 声明环境变量 子shell可以继承共享变量

export -p:列出所有的环境变量

 

声明环境变量

declare -x var

 

shell 内置变量

BASH_ENV  在非交互的时候使用.在shell script 执行的时候,首先会检查

$BASH_ENV 是否有指定启动文件,如果有就执行

 

$BASH_VERSION

$CDPATH

减少输入

ENV 显示环境变量

EUID

FCEDITOR

FIGNORE

FUNCTIONAME

GROUPS

HISTCMD历史命令序号

 

IPS for i in $var 循环分隔符号定义

ex

 

#! /bin/bash

PL="root:x:0:0:root:/root:/bin/bash"

IFS=':'

for i in $PL

do

echo $i

done

 

设置命令行执行多少次crtl+D 之后注销系统

 

IGNOREEOF=2

 

INPUTRC 

设定命令行函数库readline的启动配置文件,可以覆盖~/.inputrc的设定

 

PS1 [\h\u@\w]

PS2 >

PS3

PS4

RANDOM

 

随机数种子

RANDOM=$$ 使用SHELL的进程号作为种子

 

head -1 /dev/urandom | od -N 2 | head -1 | awk '{print $2 * 1}'

 

SECONDS shell开启的时间 单位秒

SHELL 文件路径

SHELLOPTS 相当于SET -0 开启的功能

SHLVL 子SHELL层数

TMOUT SHELL超时退出

UID

$0

$1~$n

$@代表所有的参数组成的字符串

$#位置参数的个数

$?上一个命令结束后的传回值

$$$目前bash shell的进程号

$!上一个后台程序的进程编号

$_的用途

(1)script 执行的时候 bash的绝对路径

(2)上一个命令执行时,最后一个位置的参数

(3)检查邮件时候$_的值为邮件名称

变量只读 

readonly var

readonly -f function_name

readonly -a array_name

 

declare -r var_name

declare 用法说明

 

-P 显示变量的属性

-a 变量是一个数组

-f 搜索命令 只是搜索函数 只是搜索函数列表 不搜索别名或者是外部命令

-i 声明变量为整数类型

-F 显示所有的函数式名称以及属性

-r 设定变量为只读

-t 设立变量具有trace属性

-x 设置变量为环境变量

 

建立别名

alias

 

自定义环境

 

/etc/skel 创建帐号的时候会把此目录中的所有的文件复制一份到用户的家目录中

数组的用法

 

A[0]=1

A[1]=2

A[3]="chehci"

echo ${A[1]}

echo ${A[1+1]}

 

B=(1 2 3 "333")

 

C=([2]=1,[4]=9)

 

E=(123 [9]=0 345)

 

取出所有的数组

echo ${B[*]}一个数组元素组成的字符串

echo ${B[@]}空白隔开

计算数组个数

${#数组[@]} 或者是 ${#数组[*]}

 

for t in ; do

$t

done

 

测试数组长度

${#B[index]}

 

取消数组定义

unset B

取消数组元素取值

unset B[index]

 

#! /bin/bash

from='from: me@126.com'

To='To: you@126.com'

Subject='subject'

Msg='happy new year'

Em='test.txt'

cat > $Em<<EOF

$from

$To

$Subject

$Msg

EOF

 

HERE DOCUMENT 变量赋值

WOW="WOE,GREAN"

ml=$(cat<<EOF

Line 1 is good.

They are jack

$WOW

EOF)

 

cat <<-'HERE'

去掉TAB

HERE

 

HERE DOCUMENT 多行注释

:<<DO-NOTTHING

DO-NOTTHING

 

文档批注

:<<BASH-CODE

BASE-CODE

 

SHELL添加C代码

 

cat<<'EOF'>hello.c

#include

  int main(){

  printf("hellow\n");

  return 0;

}

EOF

 

shell 变量测试

 

R=${myvar:-'chechi'}

测试变量是否存在并且判断变量是否为空

 

开启调试测试

[ -n ${DEBUG:-} ] && set -v

 

设置变量默认值

unset count

r=${count:=100}

 

${var:-替换字符串} 回传的结果一定要有非空值 

测试变量不存在或者为空

 

${var:+替换字符串} 判断某事是否为真 测试存在且非空 符合条件 传回默认值

不符合条件传回空值

截取变量字符串长度

方法一

${var:起始位置}

${var:开始位置:结束位置}

${@:起点}

 

expr length ""

length=${expr length ""}

expr "":'.*'

 

${变量#样式} 由前面开始对比 删除最短的

${变量##样式}由前面开始对比 删除最长的

${变量%样式} 由后面开始对比 删除最短的

${变量%%样式}由后面开始对比 删除最长的

 

取代删除部分变量内容

替换第一个

${变量/:/,}

example

act=mail:x:8:8/var

r=${act/:/,}

echo $r

mail,x:8:8/var

 

全部替换

act=mail:x:8:8/var

r=${act//:/,}

echo $r

mail,x,8,8/var

 

${变量/#正则表达式/} 变量开头开始

${变量/%正则表达式/} 变量结尾开始

 

删除字符串

只删除一个

${变量/正则表达式/}

删除匹配

${变量//正则表达式/}

 

${变量//#正则表达式/} 变量开头开始

${变量//%正则表达式/} 变量结尾开始

 

获取数组索引

 

ar=(a b c)

r=${!ar[@]} 获取数组索引

 

转义命令

 

DIRS=$(ls)

for f in $DIRS do

echo $f

done

 

file="/etc/passwd"

IFS=' '

fc=$(cat $file) 另外一种写法 fc(<$fiel)

echo $fc

 

PDIR=$(cd..;pwd)

最后一个命令的执行结果赋给变量

数学运算

I=$((8+10))

echo $I

r='expr 8+9'

echo $r

r=$[4+6]

declare -i $var=4+9

let r=8+9

 

echo $((${j:-8}+3))

echo $((k+3))

r=$((++i))

 

i=10

((i++))

i=11

三元运算

((n=i<100?10:80))

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值