shell——Day 2

f.alias别名:

取外号--为了方便命令的调用,取一些易记的名字

     alias  cls='clear'

     alias  cdnet='cd /etc/sysconfig/network-scripts'

     alias cls ='clear'   //等号前后没有空格

     /etc/profile    //全局生效

     /etc/rcbash

     ~/.profile       //当前目录用户下生效

     ~/.rcbash

g.文件通配符--globbing

ls /var/*.log  查看任意长度的以log结尾的文件

文件通配符和正则表达式

“ * ”不能匹配空白文件,匹配任意长度的任意字符

“ ? ”匹配任意单个字符

符号集合

    [ ]  [0--9] [a-z] [A-Z] [a-zA-Z] [0-9a--zA-Z] [^] [^0-9] 
    [:digit:],[:graph:],[:lower:],[:print:],[:punct:],[:punct:],[:space:],[:upper:],[:xdigit:]
    [:alpha:],[:alunm:]

h.重定向和管道符

1、重定向:修改程序中指令或数据的输入输出方式。

程序=指令+数据

#!/bin/bash
#
echo "hello world"

#! /bin/bash
#
cut -d ":" -fi /etc/passwd |grep user1 & > /dev/null id user1 &> /dev/null
if[$? -eq 0]:then
         echo"user alwardy exists"
         exit 10
else
         useradd user 1
         echo"123456" | passwd --stain "user1" &> /dev/null
         echo"useradd successful"
         exit 0
fi

数据变量: 可以在脚本中自己定义

                   可以在外面通过$1,$2,...${10}

                   环境变量在shell中可以直接调用

标准输入:键盘

标准输出:打印机

文件标识符:fd 0~9 0,1,2

                    0----代表正常输入

                    1----代表正常输出

                    2----错误输入输出

输出:  >     >>

                    >覆盖输出重定向,不允许用户进行覆盖重定向

                    >>追加重定向

输入:  <     <<

                    < 将后面的文件交给前面的命令执行

                    <<同时输入多行数据

注默认情况下,输入输出的文件标识符会被省略,在做错误输入输出的时候文件标识符不能被省略:

*在shell脚本中,我们往往不需要命令本身的输入输出结果,仅仅只需要命令的执行状态,所以需要将命令的所有输出内容重定向到/dev/null

i.管道 - tee

将前一条命令的运行结果,交给另一条命令执行

cut -d ":" -f1 /etc/passwd | grep user 1

Linux思想:结合小功能,实现大功能

free -m |grep "^Mem" | cut-d " " -f4

free -m |grep "^Mem" | awk ‘{print$4}’

i.文本处理工具 – wc,cut,sort,uniq

 cut
  -d   指定分割符
  -fn
  -fn1,n2,n3
  -fn1-n3
  --output-delimiter="xxx"  //指定输出分割符
  示例:cut -d":" -f1,3 --output-delimiter="=" /etc/passwd
  【注意:-h --help  短选项和长选项,短选项可以合并,而长选项不能合并】
  *cut的问题:无法识别多个空格,就这一点,就远远不如awk
 wc
  -l  行
  -c  字节大小
  -w 单词个数(默认是以空格为分隔符)
  示例:ps aux | grep httpd | wc -l
useradd user1 &/dev/null
useradd user1 > /dev/null2 >/dev/null &
useradd user1 1&>2 /dev/null

 

例:添加用户后直接修改密码
 
添加一个用户user1
 
进入useradd脚本文件:
测试

 同上,添加一个user2用户方便测试。

grep "user" /etc/passwd  //查看用户user1是否存在
 

此时,可以查看到添加的user1和user2.

1、过滤user1 和user2以及信息

grep --color=auto"^user" /etc/passwd     //过滤用户
 

2、切割出以user开头的用户名

cut -d":" -f1 /etc/passwd | grep user1   //过滤用户名
 

 删除文件:

1、rm

2、mv 将文件移动到/etc/tmp目录下 30天不被访问自动删除

3、find[范围] -name ab* type f -perm 600-mtime+7/xavgs

-s 套接字/ b块级文件/  d目录文件/  c字符文件/  p管道文件/ l字符链接文件/

motify :最后修改的文件内容,最后修改的属性

过滤所有user用户,并将运行结果交给a.txt执行

 

j.head的用法

例1:将/etc/passwd 文件前五行内容转为大写后存入f.txt文件

head -5 /etc/passwd | tr [[:lower:]] [[:upper:]] | tee a.txt

例2:将登录至当前系统上的用户信息汇总后的后3位信息转为大写后存到 /tmp/who.out

who | tail -3 |cut -d '' -f1 | tr [[:lower:]] [[:upper:]] | tee a.txt 

k.指定输出分隔符

cut   -d/    -fn/     -fn123

例:输出etc/passwd目录中的内容以“=”分割

cut -d ":" -f1,3 --output-delimiter = "=" /etc/passwd

 

原文地址:https://www.cnblogs.com/Blockblogs/p/11535457.html