当前位置: 首页 > news >正文

1.5笔记

[root@node1 ~]# cat /etc/shells 

bash -x 显示脚本的执行过程
-v 执行前打印内容
-n 检查语法,不执行

执行方法
[root@node1 ~]# ./a.sh 
[root@node1 ~]# sh a.sh 
[root@node1 ~]# source a.sh 

变量命名
只能使用英文字符,数字和下划线,首个字符不能以数字开头,变量名中间不能有空格,使用下划线替代,不能使用标点符号,不能使用bash里的关键字, 变量名尽量有意义
变量名=值
echo $变量名
unset 变量名

[root@node1 ~]# find / -name `uname -r`

#!/bin/bash
read -p "your ipaddress: " IP
ifconfig eth0 $IP

export a 声明为全局变量


运算
+     -     \*     /      %

[root@node1 ~]# num1=`expr 5 + 4`
[root@node1 ~]# echo $num1
9
[root@node1 ~]# num2=`expr 5 - 4`
[root@node1 ~]# echo $num2
1
[root@node1 ~]# num3=`expr 5 \* 4`
[root@node1 ~]# echo $num3
20
[root@node1 ~]# num4=`expr 8 /  4`
[root@node1 ~]# echo $num4
2
[root@node1 ~]# num5=`expr 5 % 4`
[root@node1 ~]# echo $num5
1
[root@node1 ~]# num6=`expr 5 / 4`
[root@node1 ~]# echo $num6
1


位置变量
#!/bin/bash
tar zcf /tmp/test.tar.gz $*  &> /dev/null
echo mulu: $*
echo zongji:$#


dhcp安装脚本
#!/bin/bash
umount /dev/sr0 &> /dev/null
mount /dev/sr0 /mnt &> /dev/null
mkdir /etc/yum.repos.d/repo
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/repo
echo "[server]" > /etc/yum.repos.d/server.repo
echo "name=server" >> /etc/yum.repos.d/server.repo
echo "baseurl=file:///mnt" >> /etc/yum.repos.d/server.repo
echo "enabled=1" >> /etc/yum.repos.d/server.repo
echo "gpgcheck=0" >> /etc/yum.repos.d/server.repo
echo "server.repo is done"
yum clean all &> /dev/null
yum install dhcp* -y &> /dev/null
echo "dhcp is done"
ls --color /etc/yum.repos.d/
rpm -qa | grep dhcp
read -p "subnet"   NET

echo "subnet $NET netmask $NETMASK {" > /etc/dhcp/dhcpd.conf 
systemc  start .......


计划任务
logbackup.sh
tar fcz   2023-01-25.tar.gz     /var/log/messages

crontabe -e
30 2 * * 0/7    /opt/logbackup/logbackup.sh


test命令
文件
-d:测试是否为目录(Directory)
-e:测试目录或文件是否存在(Exist)
-f:测试是否为文件(File)
-r:测试当前用户是否有权限读取(Read)
-w:测试当前用户是否有权限写入(Write)
-x:测试当前用户是否有权限执行(excute)


[root@node1 ~]# [ -d /etc ]
[root@node1 ~]# echo $?
0
[root@node1 ~]# [ -d /etc/passwd ]
[root@node1 ~]# echo $?
1
[root@node1 ~]# [ -f /etc/passwd ]
[root@node1 ~]# echo $?
0


&&  ||  ; !


-o or 有一个表达式为true,则返回true
[root@node1 ~]# [ -d /boot/a ]
[root@node1 ~]# echo $?
1
[root@node1 ~]# [ -d /etc -o -d /boot/a ]
[root@node1 ~]# echo $?
0

-a and 两个表达式都为true,才返回true
[root@node1 ~]# [ -d /etc -a -d /boot/a ]
[root@node1 ~]# echo $?
1
[root@node1 ~]# [ -d /etc -a -d /boot ]
[root@node1 ~]# echo $?
0


-eq:等于(Equal)
-ne:不等于(Not Equal)
-gt:大于(Greater Than)
-lt:小于(Lesser Than)
-ge:大于或等于(Greater or Equal)
-le:小于或等于(Lesser or Equal)

[root@node1 ~]# [ $a -eq $b ]
[root@node1 ~]# echo $?
1


= 内容相同
!= 内容不相同
-z 内容为空

[root@node1 ~]# [ -z "$a" ]
[root@node1 ~]# echo $?
1
[root@node1 ~]# echo $a
10
[root@node1 ~]# unset a
[root@node1 ~]# [ -z "$a" ]
[root@node1 ~]# echo $?
0

if.sh
#!/bin/bash
if [ -e /etc/passwd ]
        then
                echo "yes"
fi


if2.sh
#!/bin/bash
if [ -e /mnt/Packages ]
        then
                echo "mounted"
        else
                umoun    /dev/sr0
                mount   /dev/sr0  /mnt &> /dev/null
fi

if3.sh
#!/bin/bash
read -p "chengji: " A1
if [ $A1 -ge 80 ]
        then
                echo good
        elif [ $A1 -lt 80 ]&&[ $A1 -ge 60 ]
        then
                echo jige
        else
                echo bujige
fi


for
批量添加用户
建立用户列表
test1
test2
test3

#!/bin/bash
for i in `cat /root/user.txt`
do
        useradd $i
        echo "123456" | passwd --stdin $i &> /dev/null
done

for2.sh    判断奇数偶数
#!/bin/bash
for i in 11 22 33 44 55 66
do
a1=`expr $i % 2`
        if [ $a1 -eq 1 ]
                then
                        echo jishu,$i
                else
                        echo oushu,$i
        fi
done


建立ip.txt文档
for3.sh
#!/bin/bash
for i in `cat /root/ip.txt`
do
        ping -c 3 $i &> /dev/null
                if [ $? -eq 0 ]
                        then
                                echo $i is huozhe
                        else
                                echo $i is guale
                fi
done


while
while1.sh
#!/bin/bash
i=1
while [ $i -le 20 ]
do
        echo $i >> /root/test.txt
        let i++
done


while2.sh 建立用户
#!/bin/bash
i=1
while [ $i -le 20 ]
do
        useradd stu$i
        #userdel -r stu$i
        echo "123456" | passwd --stdin stu$i &> /dev/null
        let i++
done

while3.sh 猜数字
#!/bin/bash
i=0
jiage=`expr $RANDOM % 1000`
while true
do
        let i++
        read -p "geichu jiage 0-999: " int
        if [ $int -eq $jiage ]
                then
                        echo "gongxi $jiage,yigong $i ci"
                        exit 0
                elif [ $int -gt $jiage ]
                        then
                                echo "duole"
                else
                        echo "shaole"
        fi
done


case
#!/bin/bash
read -p "input a num: " NUM
case $NUM in
        1)
                echo "your num is 1"
                ;;
        2)      echo "your num is 2"
                ;;
        [3-8])
                echo "your num is $NUM"
                ;;
        9|0)
                echo "your num is $NUM"
                ;;
        *)
                echo "input a num [0-9]"
esac
[a-z][A-Z]


case2.sh
#!/bin/bash
read -p "input a key: " key
case $key in
        [a-z]|[A-Z])
                echo "your key is $key"
                ;;
        [0-9])
                echo "your key is $key"
                ;;
        *)
                echo "zi mu huo shu zi"
esac

case3.sh
#!/bin/bash
case "$1" in
start)
echo -n "starting......."
if sleep 7200 &
then
echo "OK"
fi
;;
stop)
echo -n "stopping....."
pkill "sleep" &> /dev/null
echo "OK"
;;
status)
if pgrep "sleep" &> /dev/null
then
echo "sleep is starting"
else
echo "sleep is guale"
fi
;;
restart)
$0 stop
$0 start
;;
*)
echo "useage: $0 {start|stop|status|restart}"
esac

he was short and fat.
He was wearing a blue polo shirt with black pants.
The home of Football on BBC Sport online.
the tongue is boneless but it breaks bones.12!
google is the best tools for search keyword.
The year ahead will test our political establishment to the li
PI=3.141592653589793238462643383249901429
a wood cross!
Actions speak louder than words
 
#woood #
#woooooood #
AxyzxyzxyzxyzC
I bet this place is really spooky late at night!
Misfortunes never come alone/single.
I shouldn't have lett so tast.
 
grep  -n  'the' test.txt   查找the并显示行号
grep  -ni  'the' test.txt   查找the并不区分大小写
grep -nv 'the' test.txt  反向查找不包含the的行
grep -n 'sh[io]rt' test.txt  查找包含shirt和short的行
grep -n 'oo' test.txt 查找重复单个字符’oo’的行
grep -n '[^w]oo' test.txt 查找’oo’前面不是’w’的行
grep -n '[^a-z]oo' test.txt 查找’oo’前面不是小写字母的行
grep -n '[^A-Z]oo' test.txt 查找’oo’前面不是大写字母的行
grep -n '[0-9]' test.txt  查找包含数字的行
grep -n '^$' test.txt  查找空行
grep -n 'w..d' test.txt  查找以’w’开头,'d’结尾共4个字符的行
grep -n 'ooo*' test.txt  查询至少包含两个o以上的字符串
grep -n 'woo*d' test.txt 查找以’w’开头,中间至少包含一个’o’的,'d’结尾的行
grep -n 'w.*d' test.txt 查找以’w’开头,'d’结尾,中间字符可有可无的行
grep -n '[0-9][0-9]*' test.txt  查询任意数字的行
grep -n 'o\{2\}' test.txt  查看2个o的字符
grep -n 'wo\{2,5\}d' test.txt  查看以’w’开头,'d’结尾,中间为2,5个o的字符串
扩展正则
grep -n -Eo 'wo+d' test.txt 执行该命令即可查询到"wood","woood","wooooood"等字符串
grep -n -Eo 'bes?t' test.txt 执行该命令即可查询到"bet""best"这两个字符串
grep -n -Eo 'of|is|on' test.txt 执行该命令即可查询到"of",或者"is",或者"on"字符串
grep -n -Eo 't(a|e)st' test.txt "tast"与"test"因为这两个单词的"t"与"st"是重复的,所以将"a"与"e"列入"()"符号当中,并以"|"分隔,即可查询"tast"或者"test"字符串
grep -n -Eo 'A(xyz)+C' test.txt 该命令是查询开头的"A"结尾是"C",中间有一个以上的"xyz"字符串的意识

\t 制表符   tab
\n 换行符 回车

sed
-e 可以在同一行里执行多条命令
echo 'hello world' | sed -e 's/hello/A/' -e 's/world/B/'

-f 还记得 -e 选项可以来执行多个子命令操作,用分号分隔多个命令操作也是可以的,如果命令操作比较多的时候就会比较麻烦,这时候把多个子命令操作写入脚本文件,然后使用 -f 选项来指定该脚本
echo "hello world" | sed -f sed.script
sed.script内容
s/hello/A/
s/world/B/

-n sed默认会把模式空间处理完毕后的内容输出到标准输出,也就是输出到屏幕上,加上-n选项后被设定为安静模式
echo -e 'hello world\nnihao' | sed 's/hello/A/'
echo -e 'hello world\nnihao' | sed -n 's/hello/A/'

-i  sed默认会把输入行读取到模式空间,简单理解就是一个内存缓冲区,sed子命令处理的内容是模式空间中的内容,而非直接处理文件内容。因此在sed修改模式空间内容之后,并非直接写入修改输入文件,而是打印输出到标准输出。如果需要修改输入文件,那么就可以指定-i选项


cat ceshi.txt

northwest       NW      Charles Main    3.0     .98     3       34
western         WE      Sharon Gray     5.3     .97     5       23
southwest       SW      Lewis Dalsass   2.7     .8      2       18
southern        SO      Suan Chin       5.1     .95     4       15
southeast       SE      Patricia Hemenway       4.0     .7      4       17
eastern         EA      TB Savage       4.4     .84     5       20
northeast       NE      AM Main Jr.     5.1     .94     3       13
north           NO      Margot Weber    4.5     .89     5       9
central         CT      Ann Stephens    5.7     .94     5       13

p 命令
命令 p 是打印命令,用于显示模式缓存区的内容。默认情况下, sed 把输入行打印在屏幕上,选项-n 用于取消默认打印操纵。当选项-n 和命令 p 同时出现时, sed 可打印选定的内容
sed -n '/north/p' ceshi.txt

d命令
命令 d 用于删除输入行。sed 先将输入行从文件复制到模式缓存区,然后对该行执行 sed命令,最后将模式缓存区的内容显示在屏幕上。如果发出的是命令 d,当前模式缓存区的输入行会被删除,不被显示。
sed '3d' ceshi.txt     删除第 3 行。默认情况下,其余的行都被打印到屏幕上。
sed '3,$d' ceshi.txt   删除从第三行到最后一行内容,剩余各行被打印。地址范围是开始第 3 行,结束最后一行。
sed '/north/d' ceshi.txt  所有包含模式 north 的行都被动删除,其余行被打印

 s 命令
命令 s 是替换命令。替换和取代文件中的文本可以通过 sed 中的 s 来实现, s 后包含在斜杠中的文本是正则表达式,后面跟着的是需要替换的文本。可以通过 g 标志对行进行全局替换
sed 's/west/north/g' ceshi.txt         s 命令用于替换。命令末端的 g 表示在行内全局替换;也就是说如果每一行里出现多个west,所有的 west 都会被替换为 north。如果没有 g 命令,则只将每一行的第一 west 替换为 north。
sed -n 's/^west/north/p' ceshi.txt       s 命令用于替换。选线-n 与命令行末尾的标志 p 结合,告诉 sed 只打印发生替换的那些行;也就是说,如果只有在行首找到 west 并替换成 north 时才会打印此行。
sed 's/[0-9][0-9]$/&.5/' ceshi.txt      当"与"符号( &)用在替换串中时,它代表在查找串中匹配到的内容时。这个示例中所有以 2 位数结尾的行后面都被加上.5。

a 命令
a 命令是追加命令,追加将新文本到文件中当前行(即读入模式的缓存区行)的后面。不管是在命令行中,还是在 sed 脚本中, a 命令总是在反斜杠的后面。
sed '/^north/a Hello world!' ceshi.txt     命令 a 用于追加。字符串 Hello, World!被加在以 north 开头的各行之后。如果要追加的内容超过一行,则除最后一行外,其他各行都必须以反斜杠结尾。

i命令 
将数据插入到某个位置之前
sed '/north/i AAAAA' ceshi.txt

c命令
将匹配行的内容替换为指定的数据
sed '/north/c AAAAA' ceshi.txt 

y命令
字符按照一对一的方式从左到右进行转换
sed 'y/abc/ABC/' ceshi.txt 

awk
FS 分隔符 默认是空格
NF 子段的数
NR 行号 默认从1开始
$0 完整输入记录
$n 当前记录的第n个子段
FILENAME 文件名
RS 记录分隔符--默认为换行符


-F 指定分割符

相关文章:

  • 网站备案图片/百度一下网页
  • 深圳网站建设10强/企业文化建设方案
  • 网站素材资源/手机如何建立网站
  • 大足网站建设公司/农产品网络营销策划书
  • 上海做网站哪家正规/网络营销策略实施的步骤
  • 佛山网站制作建设/网站查询备案信息
  • 1、Mavan项目管理工具
  • 开放式基金净值实时数据 API 数据接口
  • CentOS即将停止维护,拥抱阿里“龙蜥“(Anolis OS),VMware安装Anolis OS与介绍
  • 计算机图形学实习教程之基本图形的生成(扫描线填充算法+图形缩放算法+对称变换算法+消隐算法+金刚石图案算法),利用C#实现,附源码
  • dp(七)把数字转化为字符串 (力扣版+牛客版) 跳台阶问题+最小花费跳台阶
  • C++进阶 红黑树封装map和set
  • css03笔记
  • 同源策略与跨源策略
  • 什么样的故障让阿里云换了总裁?
  • 字节跳动青训营--前端day1
  • NET餐厅管理系统前端js-dwz.dialog初始化半透明层、改变阴隐层
  • Spring入门-IOC/DI注解管理与整合mybatis及Junit(2)