实用 shell 命令

全局变量

  • 当前目录和时间
PWD=$(pwd) //当前目录
date=$(date) //当前时间
  • 当前文件dirname和basename
dir=$(dirname $0)
base=$(dirname $0)

文件操作

  • 判断文件(或者目录)是否存在
if [[ -e file ]]   // 是否存在
if [[ -d file ]]   // 是否是目录
if [[ -f file ]]   // 是否是文件
  • 文件内容增删改查 sed
    sed [选项] [命令] ,
    常用选项:
    -n 只有经过sed特殊处理的那一行才输出
    -i 直接修改读取的文件内容,而不是输出到终端
    -r 支持正则表达式
    常用命令:
    a 新增行 ,当前行之后
    i 插入行,当前行之前
    c 整体取代
    s 部分替换
    d 删除
    p 打印
sed -i "" "1,2d" file  // 直接删除1-2行,不备份
sed -i ".bak" "1,2d" file  // 直接删除1-2行,不备份
sed -i "" '1,3a drink tea' ab.txt  // 在第一行到第三行后增加字符串"drink tea",不备份
sed -i "" '1,2c Hi' ab.txt  // 把ab.txt的第一行到第二行替换为Hi,不备份
sed -i "" 's/ruby//g' ab.txt  // 把全部的ruby替换为空,即删除ruby字符串,不备份

  • 查找并遍历文件
file=$(find ./src -name '*.js' ! -name '*.story.js'); // ! 表示排除以.story.js的文件
for loop in $file
do
  command
done
  • 字符串操作
// 写内容到文件
echo -e "string\n" > file    // -e 表示识别字符串中的特殊字符,会覆盖file内容
echo -e "string\n" >> file    // -e 表示识别字符串中的特殊字符,不会覆盖file内容,而是追加
// 截取字符串
var='/abc/def/a.js'
echo ${var#*\/} // 从左往右,取第一个/开头的右边部分,结果为:abc/def/a.js
echo ${var##*\/} // 从右往左,取第一个/开头的右边部分,结果为:a.js
echo ${var%\/*} // 从右往左,取第一个/开头的左边部分,结果为:/abc/def
echo ${var%%\/*} // 从左往右,取第一个/开头的左边部分,结果为:
echo ${var:1:3} // 取1,3位,结果为:abc
// 拼接字符串
var='a'
var2='b'
echo "$var:$var2" // a:b
  • 命令行快捷操作
ctrl + a  // 移动到行首
ctrl + e  // 移动到行尾
ctrl + u  // 删除鼠标所在位置到行首之间所有内容
ctrl + k  // 删除鼠标所在位置到行尾之间所有内容

易错点

  • 变量定义不能有空格
name="test" // 等号必须紧邻name,不能有空格
  • 条件控制,中括号有空格
if [[ $a ]];then
 command
else
 command
fi

if [[ ]];then
 command
elif [[ ]];then
 command
else
 command
fi
  • 交互读取
read -p "Input Component Dirctory Name: " name
echo "$name"

你可能感兴趣的:(实用 shell 命令)