bash

环境变量定义:

       export name = jary

       取消全局变量:unset name

位置变量定义:

     $1,$2...,

     $0表示执行脚本时的路径和本身如:basename $0

     shift:参数轮换

特殊变量:

    $?:上一个进程状态返回值

    $#:参数个数

    $*:参数列表

    $@:参数列表

程序执行:可能有2类返回值

             程序执行结果

             程序状态返回代码(0-255):

                    0:表示正确

                     1-255:错误执行 1,2,127这三个系统预留

查看shell中变量:用set 不带任何参数,包含环境变量和本地变量

查看当前shell环境变量:

        printenv

       $PATH

        export

 

条件语法:

      if  条件表达式;then

          表达式

     elif 条件表达式;then

          表达式

     else

         表达式

      fi

        条件测试:(整数测试,字符测试,文件测试)

                       格式:注意:表达式与中括号必须有空格,否则会报语法错误

                               [ 表达式 ]:

                               [[ 表达式 ]]

                               test 表达式

                       整数测试:a=3 b=3 c=5 d=2

                                    -eq:相等  [ $a -eq $b ]  echo $?

                                    -ne:不等于 [ $a -ne $b ] echo $?

                                    -gt:大于[ $a -gt $c ]

                                    -lt:小于[ $d -lt $c ]              

                                    -ge:大于等于[ $d -ge $d ]

                                    -le:小于等于[ $a -le $c ]

                                    !:取反,id user 如果不存在就添加用户

                      文件测试:

                                    -e:文件/目录是否存在 [ -e /user1/a1.ini ]

                                    -f:是否为普通文件[ -f /user1/secoud.sh]

                                    -d:是否为目录[ -d /user1/tp]

                                    -r:对当前用户来说,文件和目录是否可读[ -r /user1/a1.ini ]

                                    -w:对当前用户来说,文件和目录是否可写[  -r /user1/tp ]

                                    -x:对当前用户来说,文件是否可执行[ -x /user1/secound.sh ]

                    字符串测试:

                                     ==:等于[ $a == $b ]

                                    !=:不等于[ $a != $b ]

                                    -n 字符串:测试指定字符串是否为非空,非空为真,空为假

                                    -z 字符串:测试字符串为空,空为真,不空为假

         逻辑关系:

             条件1&&条件2:条件1为真,判断条件2是否为真,条件1为假,不用判断条件2

             条件1||条件2:条件1为假,判断条件2是否为真,条件1为真,不用判断条件2

      组合条件:

           -a:与 [ $a -gt $b  -a  $c == "abc" ]

           -o:或[ $a -ge $b  -o $c == "abc" ]

           !:非

算数运算:

           let:算数运算表达式 let c=$a+$b

           $[ 算数运算表达式 ] c=$[ $a+$b]

          $(( 算数运算表达式 )) c=$(( $a+$b ))

          expr:表达式中各操作数值与运算符要有空格,而且要使用命令引用 c= `expr $a + $b` 

exit:退出脚本,中断进程

bash -n 脚本名称,测试脚本是否有语法错误

bash -x 脚本名称:脚本没一行执行过程

 

sed:流编辑器,也是行编辑器,默认修改源文件

       格式:sed [options]“addresscommand” file...:对文件符合地址的行,执行编辑命令

                       -n:不在默认显示默认空间的内容 sed ‘$=’ a1.ini打印总行数

                       -i:直接修改源文件

                       -e:可以使用多个addresscommand

                       -f file:读取文件的多个addresscommand

                       -r:支持使用扩展的正则表达式

               address:

                              开始行,结束行: 直接指定行如:1,100   从第1行开始,到第100行结束

                                              $:表示最后一行

                              /正则表达式/:  模式匹配如:/^root/ 

                             /pattern1/,/pattern2/:从第一次匹配的pattern1行开始,到第二次匹配的pattern2行结束,这中间的行

                             一个数字:直接指定某行

                            一个数字 +n:表示从这数字行开始,执行n行

          command:

                        d:删除如 sed ’1,2d‘ /user1/a1.ini

                        p:匹配上的显示2次,没匹配上的显示一次(一次是p处理显示的,一次还是在模式空间里,若加上-n则只显示匹配上的内容) sed -n ‘/sh$/p’ /user1/a1.ini

                        a \字符串或a字符串:在指定行后面添加新行内容(字符串)sed '1,3aToday is luck'

                        i \字符串 或 i字符串:在指定的行前面添加新行内容(字符串)sed '/^.r/iToday is luck'  a1.ini

                        r file:将在符合条件的行添加新行,新行内容是file文件里面的全部内容如:sed  '2r /user1/n1.log'  a1.ini

                        w file:将匹配上的行添加到file文件后面如:sed '/^to/w /user1/n1.log' a1.ini

                        s/pattern1/字符串/修饰符:表示把匹配上的行的pattern1(可以正则表达式,也可以字符)替换成字符串如:sed ‘/sh$/s/[[:upper:]]/99/’ a1.ini,注意:不加修饰符,是每行替换第一个

                                   修饰符:

                                             g:全部替换如sed ‘/^-/s/a/uu/g’ a1.ini

                                             i:忽列大小写sed '/^-/s/m/YY/i' a1.ini

                      &:引用模式匹配整个字符串如:sed ‘1s#[[:lower:]]#&8#g’ a1.ini 把第一行的每个小写字母都加上8,注意s/pattern1/字符串/修饰符分割符可以写成s#pattern1#字符串#修饰符,只要相同就行了

                                如:sed ‘2s#\(..e\)#L\1#g’ a1.ini 把正则表达式(..e)匹配上的字符串替换成L..e

循环语句:

for:

     格式:

             for 变量 in 列表变量;do

                   表达式

             done

which

until

列表:

      {1..100}:表示1到100整数

      seq 开始数 【间隔数】 结束数如:seq1 100,seq 2 2 20,seq 10

declare :

     -i sum :参数sum是整数

     -x :表示声明环境变量

vim 按

      i:转入光标前面进入输入模式

     a:转入光标后面进入输入模式

     o:在光标所在行的下面新增一行

     ESC:退出输入模式

     :转入末行,也就是末行模式,进入末行模式后按ESC转回编辑模式

    :q不保存退出

    :wq不保存退出

    v:进入视图模式

    p:粘贴

    y:复制

vim 文件1 文件2,在末行模式下next可以切换到文件2,用prev可以切换到文件1

在末行模式下set nu显示行号,set noun,永久行号:/etc/vimrc(/etc/virc)最后加入一行 set number,或家目录新建.vimrc文件,并添加set number

 

文件查找:

              locate:非实时的,模糊查找是根据全系统文件数据库进行的,updatedb 手动生成文件数据库如locate passwd

             find:

                  格式:find 路径 标准 查找到以后的动作(路径:默认当前目录,标准:默认当前路径下的所有文件,查找到以后的动作:默认显示)

                          标准:

                                  -name :根据文件名查找 find -name sh*

                                  -iname:不区分大小写 find -iname u.sh

                                  -regex:使用正则表达式(必须包括路径匹配)

                                  -user:根据文件属主查找

                                  -group:根据文件属组查找

                                  -uid:根据uid查找

                                  -gid:根据gid查找

                                  -nouser:查找没有属主文件

                                  -nogroup:查找没有属组文件

                                  -type:

                                             f:普通文件

                                             d:mulu

                                             c:字符设备

                                              b:块设备

                                              l:链接文件

                                              p:管道设备

                                              s:套子文件

                               -size [+或-]:根据大小查找

                                         k:有+或-表示大于或等于多少k,1k表示0到1k,

                                         M:有+或-大于或小于多少M  10M表示9M到10M

                                         G:有+或-大于或小于多少G

                             -mtime[+或-]:根据修改时间查找,+5表示5天前修改,-5表示5天内到现在,5表示第5天

                             -atime[+或-]:

                             -ctime[+或-]:

                             -mmin[+或-]:根据分钟查找,+5表示5分钟前修改,-5表示5分钟内修改,5表示第5分钟修改

                             -amin[+或-]:

                             -ctime[+或-]:

                             -perm[/或-] 根据权限查找,find -perm 644,表示精准匹配权限为rw-r--r--文件,find -perm /644 表示个权限中至少有一个匹配的,find -perm -644 表示权限完全包含rw-r--r--文件

                       动作:

                             -print:默认显示

                            -ls:类似与ls -l

                            -ok  命令 {}\;如 find -perm 006 -ok chmod o-w {}\;    表示找到权限为------rw-文件并把其他组的w权限去掉,{}表示文件名,这命令会每个需要由用户确认

                            -exec 命令 {}\;如find -perm 007 -exec chmod o-x {}\;  表示找到权限为------rwx文件并把其他组的x权限去掉,{}表示文件名,这命令不需要由用户确认,直接改

                            xargs:与find搭配使用和exec差不多,只是显示不同例如:

                                       find ./ -size +1k -exec echo {}  >> a1.ini \;

                                       显示为a1.txt

                                                  a2.txt

                                     find ./ -size +1k | xargs echo >> a1.ini

                                      显示为a1.txt  a2.txt

               组合条件:

                             -a:与

                             -o:或

                             -not:非

                                              

 特殊权限:

                SUID:当某文件有suid权限,运行某进程时,相应进程的属主是程序文件自身的属主,不在是启动者 例如chmod u+s /bin/cat

                SGID:当某目录有guid权限,新建文件的属组是目录自身的属组,不在是创建者的属组 例如chmod g+s /user2,这目录的属组是mygroup ,用户的附加组是mygroup,这样只有属于mygroup用户都可以访问目录user2,并可以删除其他用户创建的文件

                Sticky:在一个公共目录,可以新建删除自己文件,但无法删除别人创建的文件如:chmod o+t /users1

 

文件系统访问列表(facl):利用文件的扩展属性保存额外的访问控制权限

              setfacl:

                        -m:设定额外访问权限列表,注意权限不能超出mask(不固定)的权限

                             u:用户:rwx:设定某用户有某权限 setfacl -m u:user1:rw n2.log

                             g:组名:rwx:设定某组有权限setfacl -m g:mygroup:rw n2.log

                                用得不多命令: d: u:用户:rwx:表示设定目录的,以后在此目录下新建文件会默认继承该目录的权限

                                 用得不多命令:d:g:组名:rwx:表示设定目录的,以后在此目录下新建文件会默认继承该目录的权限

                        -x:取消额外访问权限

                            u:用户  setfacl -x u:user1 n2.log

                            g:组名 setfacl -x g:mygroup n2.log

                       --mask:指定mask

              getfacl:如getfacl n2.log

whoami:显示当前谁登录了系统

who:显示谁登录系统

      -r:显示运行级别

w:和who差不多,显示多了用户干了什么

last:显示那个用户登录了系统和系统重启系统,这些信息在/var/log/wtmp文件内容

lastd:显示用户错误登录系统,/var/log/btmp

lastlog:显示每个用户上次登录时间

         -u 用户名

basename:显示路径的文件名,就是显示文件名,显示不了目录

sleep 5 :沉睡5秒,可以用来做每个5秒做什么事情

mail:显示邮件信息,邮件信息反正家目录mbox,如:cat /user1/n2.log | mail -s “邮件主题” root 表示给root用户发邮件

$HOSTNAME:当前主机主名,echo “$HOSTNAME”

hostname 主机名:修改主机名

RANDOM和URANDOM:生成0-32768随机数

   对应生成器:/dev/random(会堵塞,加密安全),/dev/uramdom(不会堵塞,加密不太安全)

 

case:

    case 变量 in

        值1)

                表达式

                ;;

       值2)

               表达式

               ;;

        *)

             表达式

             ;;

esac

:

posted @ 2020-05-14 18:47  jack_浩  阅读(128)  评论(0)    收藏  举报