Linux文本操作
man bash
解释从命令行或者从文本读取的命令
ls /
echo "hello"
echo $$
source 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\n" 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=$'\n'
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=$'\n'
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: 可执行文件, 用户命令