shell脚本(一)

1 `` () {} (()) []的区别
$`` 和 $()
在 bash shell 中,$( ) 与` ` (反引号) 都可用做命令替换用。例如:date=$(date +%Y%m%d)和date=$`date +%Y%m%d`得到系统时间
其中:``    基本所有unix shell中使用,()不是所有shell支持

${}
用于变量的替换,例如:
filename="123.txt"
filename1="${filename%.txt}_1.txt"    
其中,${}中的模式匹配:
${variable#pattern}  去掉左边最短的匹配模式
${variable##pattern}  去掉左边最长的匹配模式
${variable%pattern}   去掉右边最短的匹配模式
${variable%%pattern}   去掉右边最长的匹配模式
${variable/oldword/newword}     替换第一个旧字符为新字符
${variable//oldword//newword}     替换所有旧字符为新字符
其他:
var=${str-expr}
var=${str:-expr}
var=${str+expr}
var=${str:+expr}
var=${str=expr}
var=${str:=expr}
var=${str?expr}
var=${str:?expr}

$[] 和 $(())
两者都用于数学运算,例如
read -p "First number": firstnum
read -p "Second number": secondnum
total=$((${firstnum}*${secondnum}))

2.grep sed awk
grep(管道命令,支持正则表达式的关键字) 主要用于查找,以行为结果进行输出
常用选项:     -n 显示行号
              -vn 反向选择不包含关键字的行
              -in 忽略关键字的大小写,模糊查找
              -A 关键字的前几行也匹配出来, -A 2
              -B 关键字的后几行也匹配出来, -B 3

sed(管道命令)
主要用于编辑,按行输出
基本工作方式: sed [-nef] '[动作]' [输入文本]
常用选项:
    -n : 安静模式, 一般sed用法中, 来自stdin的数据一般会被列出到屏幕上, 如果使用-n参数后, 只有经过sed处理的那一行被列出来.
    -e : 多重编辑, 比如你同时又想删除某行, 又想改变其他行, 那么可以用 sed -e '1,5d' -e 's/abc/xxx/g' filename
    -f : 首先将 sed的动作写在一个档案内, 然后通过 sed -f scriptfile 就可以直接执行 scriptfile 内的sed动作 (没有实验成功, 不推荐使用)
    -i : 直接编辑, 这回就是真的改变文件中的内容了, 别的都只是改变显示. (不推荐使用)
动作:
    a 新增, a 后面可以接字符串, 而这个字符串会在新的一行出现. (下一行)
    c 取代, c 后面的字符串, 这些字符串可以取代 n1,n2之间的行
    d 删除, 后面不接任何东西
    i 插入, 后面的字符串, 会在上一行出现
    p 打印, 将选择的资料列出, 通常和 sed -n 一起运作 sed -n '3p' 只打印第3行
    s 取代, 类似vi中的取代, 1,20s/old/new/g

awk(管道命令)
主要用于分析,按每行的字段进行输出
基本工作方式:awk '条件类型1{动作1} 条件类型2{动作2}...' 
awk命令较为复杂,使用时候再man awk查看

3.script执行的差异
source shellfile 在当前进程下执行script
sh shellfile 创建子进程执行script

4.test命令,测试文件及相关属性
常用选项:    -e 档名是否存在
            -f 档名是否存在且为文件类型
            -d 档名是否存在且为目录类型
            -r/-w/-x... 权限检查
            -nt 判断file1是否比file2新 test file1 -nt file2 
            -od 与-nt相反
            -ef file1和file2是否是同一文件,主要判断hard link
            -eq/-ne...整数之间的判断
            -z/-n/==/!=  字符串的判断
            -a -o ! 多重判定,类似与或非

5.条件判断句式
1)
if [ exp ]; then
    code
fi

2)
if [ exp ]; then
    code1
else
    code2
fi

3)
if [ exp1 ]; then
    code1
elif [ exp2 ]; then
    code2
else
    code3
fi

4)
case $var in
    "condition1")
        code1
        ;;
    "condition2")
        code2
        ;;
    *)
        code3
        ;;
esac

6.func功能
语法:
function fun(){
    code
}

函数调用
fun() parementer1 ...

7.循环语句
1)
while [ condition ]
do
    code
doen 

2)
until [ condition ]
do 
    code
done

3)
for var in condition1 condition2 condition3...
do
    code
done

4)
for ((初始值; 限制值; 执行步阶))
do
    程序段
done

8.cut命令
   -b:按字节筛选;
   -n:与"-b"选项连用,表示禁止将字节分割开来操作;
   -c:按字符筛选;
   -f:按字段筛选;
   -d:指定字段分隔符,不写-d时的默认字段分隔符为"TAB";因此只能和"-f"选项一起使用。
   -s:避免打印不包含分隔符的行;
   --complement:输出不符合要求的列(补集)
   --output-delimiter:指定输出分割符;默认为输入分隔符。

9.command > file 2>file  与command > file 2>&1 有什么不同的地方.
首先 command > file 2>file 的意思是将命令所产生的标准输出信息,和错误的输出信息送到file中,command  > file 2>file 这样的写法,stdout和stderr都直接送到file中, file会被打开两次,这样stdout和stderr会互相覆盖,这样写相当使用了FD1和FD2两个同时去抢占file 的管道.
而command >file 2>&1 这条命令就将stdout直接送向file, stderr 继承了FD1管道后,再被送往file,此时,file 只被打开了一次,也只使用了一个管道FD1,它包括了stdout和stderr的内容.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值