Linux文本操作

文本流&重定向

man bash

解释从命令行或者从文本读取的命令

ls /

echo "hello"

echo $$

source sh01.sh 读取当前文本文件命令

. sh01.sh 读取当前文本文件命令

pstree 查看bash命令关系

bash sh01.sh 在子bash运行文件

type yum查看文件路径

脚本本质

文件头加上#! /bin/bash

chmod +x sh01.sh

./ sh01.sh 在启动一个子bash执行文件,在退出子bash,回到父bash。

默认开启

I/O 重定向

0:标准输入

1:标准输出

2:错误输出

虚拟终端

cd /proc/13175/fd

fd 文件描述符

ps -ef 查看所有进程

ls 1> aaa 标准输出到aaa文件 重定向

ls /mnt 1>aaa 覆盖重定向

ls /tmp 1>>aaa 追加重定向

ls / /tmp 与 ls /tmp /

先输出外出目录,在输出内目录,同级目录按字典序输出

ls /aabb s>ccc

cat ccc 错误输出

ls / /aabb 1>ls01.out 2>ls02.out 分别重定向

ls / /aabb 1>ls03.out 2>ls03.out 先报错在运行正确的

ls / /aabb 1>ls06.out 2>&1

ls / /aabb >&(&>) ls07.out也可以把两种输出写到同一个文件中

从左到右依次绑定 '>'左边不能包含空格,右边可以

read 输入重定向

read aaa <<<"hello sxt" echo $aaa

read aaa<<AABB 输出AABB结束 只输出第一行

cat 0</etc/asd 输入重定向

linux访问百度

exec ls 替换bash

exec 8<> /dev/tp/www.baidu.com/80

cd /proc/$$/fd开启了一个socket

echo "GET /HTTP/1.0 " 1>&8 短链接,只能发送一次请求 想要再次访问 需要重新exec 9<> /dev/tp/www.baidu.com/80

cat 0<&8

shell变量

aaa=sxt

echo aaa

本地:当前shell(bash)拥有

局部变量:加上local 只能用于函数内

sxt(){

echo sxt

local ccc=world

echo $ccc

}

位置变量:$1 ,$2,${11} 某些变量和常量一起使用时。变量用{}包起来

bash只对空格,制表符敏感

sxt={1 2 3} echo $sxt[1]输出2

$#:位置参数个数

$*:参数列表,双引号引用为一个字符串

$@:参数列表,双引号引用为单独的字符串

$?:上一个命令退出状态 0:成功,非0:失败

test 条件表达式 test help [3 -gt 2] [-a passwd]

echo "aaa04" | passwd --stdin aaa04 修改密码静默输出

#! /bin/bash

useradd $1

echo $1 | passwd --stdin $1

echo "user add success"

流程控制

if while for

if test 3 -gt 2;then echo ok;fi

if tesht 3 -eq 4;then echo ok ;elif test 3 -eq 3;then echo 3;fi

while 命令 ; do 命令 ;done

-le = <

while test $a -le 5; do echo $a; ((a++));done

for ((a=1;a<=5;a++));do echo $a;done

for i in 1 2 3 4 5; do echo $i ;((i++));done

seq 打印一个数字序列

for i in `seq 5``;do echo $i;((i++));done 输出12345

`seq 5``表示该命令提前执行实际为单反引号

练习 找到用户指定目录中最大的文件

du -h /tmp/ 显示文件夹内所有文件及其大小

du -a /tmp/ | sort -nr 文件夹内所有文件(包含隐藏文件)按文件大小倒序排列

#! /bin/bash

oldIFS=$IFS

IFS=$' '

for i in `du -a $1 | sort -nr ``;do

filename=`echo $i | awk '{print $2}'``

if [ -f $filename ];then

echo $filename

break

fi

done

IFS=$oldFIS

 

#! /bin/bash

num=0

oldIFS=$IFS

IFS=$' '

for i in `cat file.txt``;do

echo $1;

((num++))

done

echo "num:$num"

IFS=$oldIFL

echo "----------------------------"

num=0

lines=`cat file.txt | wc -l``

for((i=1;i<=lines;i++));do

line=`head -$i file.txt | tail -1``

echo $line

((num++))

done

echo "num:$num"

echo "--------------------"

num=0

while read line;do

echo $line

((num++))

done <file.txt

echo "num:$num"

echo "--------------------"

num=0

cat file.txt | while read line;do

echo $line

((num++))

done

echo "num:$num"

echo "--------------------"

||或(或者) &&与(并且)

 

 

•/etc/rc.d/init.d/functions脚本介绍:

•functions这个脚本是给/etc/init.d里边的文件使用的,提供了一些基础的功能

•重要函数:

–checkpid:检查是否已存在pid,如果有一个存在,返回0(通过查看/proc目录)

–daemon:启动某个服务。/etc/init.d目录部分脚本的start使用到这个

–killproc:杀死某个进程。/etc/init.d目录部分脚本的stop使用到这个

–status:返回一个服务的状态

•我们可以在自己的脚本中通过source或.的方式导入

•Filesystem Hierarchy Standard(文件系统层次化标准):跟文件系统:/

–/boot: 系统启动相关的文件,如内核、initrd,以及grub(bootloader)

–/dev: 设备文件

–/etc:配置文件

–/home:用户的家目录,每一个用户的家目录通常默认为/home/USERNAME

–/root:管理员的家目录;

–/lib:库文件 :没有执行入口的应用程序

–/media:挂载点目录,移动设备

–/mnt:挂载点目录,额外的临时文件系统

–/opt:可选目录,第三方程序的安装目录

–/proc:伪文件系统,内核映射文件

–/sys:伪文件系统,跟硬件设备相关的属性映射文件

–/tmp:临时文件, /var/tmp

–/var:可变化的文件

–/bin: 可执行文件, 用户命令

–/sbin:管理命令

原文地址:https://www.cnblogs.com/huzicourenao/p/10994371.html