shell

来源:互联网 发布:南方报业 知乎 编辑:程序博客网 时间:2024/05/21 06:29

#!/bin/bash

运行.sh文件时,在在新的shell实例中运行

变量

本地变量 x=1

环境变量:系统定义的环境变量USER PWD HOME PATH;用户定义的环境变量 export x=1   或 x=1   export x

预定义变量:$? 上条语句的返回值;$$ 当前进程号;$! 最近一个后台进程号

位置参数变量:$1-10 各个参数;$@ 参数数组;$* 参数整体;$# 参数个数


查看变量 set env

删除变量 unset x

从标准输入读取变量

    read -p "提示" -t 超时秒数 x

    echo $x

环境变量配置文件加载顺序:/etc/profile     /etc/profile/*.sh    ~/.bash_profile    ~/.bashrc    /etc/bashrc

环境变量立即生效:source 或 . 环境配置文件

运算

声明变量类型:declare -a  数组

      -i 整型 、-x 环境变量  、-r 只读

字符串连接:“$x”123  ${x}123   "$x 123"

四则运算:$(expr $a+$b)  、 $[$a+$b] 、$(($a+$b))

获取命令的返回:$(date)

参数展开:${x:1:4} 截取字符串,${#x} 字符串长度,${x/a/b}用b替换x中a的匹配,${x,,}小写化,${x^^}大写化

     ${y-a} 相当于 y || a || null  ,${y+a} 相当于 y?a:null


字符截取

行截取: grep 正则  文件

列截取:cut -f 1,3 -d ":" 文件 #截取1、3列,以分号为分隔符,默认以制表符为分隔符

格式化输出:print "%s" $(cat 1.txt)

awk命令:awk '条件{动作} 条件{动作}' 文件名

不定长空格的列截取:df -h | awk '{print $3}' #截取第三列

指定分隔符的列截取:awk 'BEGIN{FS=":"} {print $3}'

同时行列截取:awk '$3>60{print $1}'

其他的命令:sort 排序、wc 统计、unique 去重

sed命令:sed -i '行范围 动作'  文件名  #除了用行号也可以用正则来匹配行

删除行:sed -i '2,4d' 文件名

后追加行:sed -i '2a haha' 文件名

前插入行:sed -i '2i haha' 文件名

替换行:sed -i '2c haha' 文件名

替换字符:sed -i 's /ka/ha/g' 文件名 #没有g的话,只替换一次


流程控制

条件:

文件条件:[-d a] 是否存在目录、[-f a.txt] 是否存在文件、[-e a]是否存在文件或目录、-r -w -x 是否存在并且存在相应权限

数组条件:[23 -ge 22] 是否相等、-ne 是否不等、-gt 大于、-lt 小于、-ge 大于等于、-le 小于等于

字符串条件:[-z $x] 字符串是否为空、-n 是否非空、[$x == $y] 是否相等、!= 是否不等

条件连接:-a 并且、-o 或、! 非


if 判断:

if [ ]

   then

   程序1

elif [ ]

    then

   程序2

else

   程序3

fi


case判断:

case "$x" in

    1)

        程序

    ;;

   *}

       程序

    ;;

esac


for 循环:

for i in $a #数组或空格、换行隔开的字符串

   do

   程序

done

或者

for ( ( i=0;i<100;i=i+1 ) )

do

程序

done


while循环:

while[ ]

do

程序

done


until 循环:

until[ ]

do

程序

done


函数

function fn()

{

    return $(($1 + $2))  #如果无return 则默认返回最后一条语句的返回值

}

调用:x = $(fn 2 3)



标准输入与输出

标准输入:默认为键盘,文件描述符 0,

标准输出:默认为控制台,文件描述符 1。标出输出可以被重定向为文件或设备。&>/dev/null,输出到空设备,即丢弃输出

标出错误输出:默认为控制台,文件描述符 2。&2>1,将标准错误输出重定向到标准输出

0 0
原创粉丝点击