脚本
用户判断
#!/bin/bash
id user1 &> /dev/null && echo "user1 exists." || useradd user1
id user1

如果user1有  则echo  否则建立用户
#!/bin/bash
w | grep "^root\>" &> /dev/null && echo "root logged" || echo "root is not logged"

egrep及扩展的正则表达式
  egrep = grep -E

基名 basename   /path/.../basename
就是最后一个名字(路径)

dirname 目录名字

grep -E ^(a|b|c)\>''  /etc/passwd

grep -E -o "^[_[:alpha:]+\(\)]"  /etc/passwd

echo "/mnt/sdc" | grep -E "[^/]+/?$"  |cut -d "/" -f1
要过滤基名  除了斜线外的内容后面至少出现一次字符,而且最后一个斜线可有可无
也可在现实中去掉斜线

fgrep 不支持正则表达式搜索

 
  chmod +x name.sh

    变量类型
        数据存储格式  存储空间大小 参与运算种类

    
    强类型:定义变量时必须指定类型、参与运算必须符合类型要求
    弱类型:无需指定类型,默认均为字符型;参与运算会自动进行隐式类型转换

bash是弱类型 
    a=3
    b=4
    echo "$a+$b"    显示3+4

bash中变量的生效范围等标准
    本地变量:生效范围为当前shell进程,对其他或者自己的子shell也无效
    环境变量:生效范围当前shell进程及子进程
    局部变量:范围为当前shell进程中某代码的片段(通常指函数)
    位置变量:$1 $2 ..来表示 用于脚本在脚本中通过调用命令行传递给他的参数
    特殊变量:$?(能否运行成功)  $0(表示命令本身,也是一个位置变量)
        $#  $@  $*

    本地变量
        赋值name="value"  '' 弱引用 强引用
            name="$value"
            name=`COMMAND`或者 name=$(COMMAND)  执行后的结果
        引用${name}   $name
        ""弱引用:变量引用会被替换为变量值
        ''强引用:变量引用不会被替换为变量值,而保持原字符串
        ``命令引用
        显示已经定义的所有变量 set
        unset name  销毁变量
    
    环境变量
        变量声明、赋值
        expor name=VALUE
        declare -x name=VALUE
        变量引用 $name ${name}
        显示所有环境变量
            export
            env
            printenv
        销毁
            unset name
        bash内键的环境变量
         PATH  SHELL  UID  HISTSIZE  HOME  PWD  OLD  HISTFILE  PS1
        变量命名法则
            1不能用if for
            2只能只用数字、字母、下划线,不能以数字开头
            3最好见名知义  total_size
    只读变量        
    readonly name
    declare -r name
    位置变量
           在脚本代码中调用用过命令行传递给脚本的参数
        $1  $2 对应第1 2个参数
        $0  命令本身
        $* 传递给脚本的所有参数
        $@ 传递给脚本的所有参数
        $# 传递给脚本的参数的个数
      换岗 shift  踢掉一个输入的命令  shift n 踢掉n个
    
bash配置文件
    全局配置
        /etc/profile
            /etc/profile.d/*.sh
        /etc/bashrc
    个人配置
        ~/.bash_profile
        ~/.bashrc

测试命令
    test EXPRESSION
        [[EXPRESSION]]
数值测试
是否
-gt大于
-ge大于等于
-eq等于
-ne不等与
-lt小于
-le小于等于

字符串测试
是否
==
>
<
!=不等于
~=    左侧字符串是否可以被右侧的模式(PATTERN)所匹配(全部匹配);
-z "STRING"  测试字串是否为空  空则为真1
-n "STRING"  测试字符串是否不空   不空为真1

用于字符串比较式用到的操作数都要使用引号

name=Obama
[ -z "$name"]

$?  显示0表示运行成功]]
    bash测试类型
数值测试   
是否
-gt大于
-ge大于等于
-eq等于
-ne不等与
-lt小于
-le小于等于

字符串测试
是否
==
>
<
!=不等于
=~    左侧字符串是否可以被右侧的模式(PATTERN)所匹配(全部匹配);
    此处一般用于[[ ]]测试符号中
-z "STRING"  测试字串是否为空  空则为真1
-n "STRING"  测试字符串是否不空   不空为真1

用于字符串比较式用到的操作数都要使用引号

name=Obama
[ -z "$name"]

$?  显示0表示运行成功

文件测试