X

曜彤.手记

随记,关于互联网技术、产品与创业

常用 Shell 知识点和技巧

学过的东西不经常用就会忘,往往再次捡起来又会花费不少时间。趁此机会整理下编写 Shell 脚本相关的知识点语法。这里基于的是 Bash Shell,其他 Shell 也大致一样。行文没有什么入门顺序,想到哪儿写到哪儿。请注意,本文不是入门教程,只是单纯记录。

# 基本重定向;
ls -al > standardOutput.txt 
ls -al 1> standardOutput.txt 
ls -al 2> errorOutput.txt 
ls -al > /dev/null
ls -al 1> standardOutput.txt  2> errorOutput.txt 
ls -al 1> standardOutput.txt 2>&1

# 追加重定向;
ls -al >> standardOutput.txt 

# 管道;
ls -al | grep "fileName"
find / -type f -name "fileName" | xargs grep "fileContent" > list.txt
ps -aux | grep "pid"
ps | sort | more

# 标准自启动注释;
#!/bin/sh

# 常用环境变量;
$HOME # 当前登录用户的家目录;
$PATH # 搜索命令的目录列表;
$PS1  # 命令提示符(默认是$);
$PS2  # 二级提示符(默认是>);
$IFS  # 输入域分隔符(默认是空格);
$0    # Shell 脚本的名字;
$#    # 传递给脚本的参数个数;
$$    # Shell 脚本的进程号;
$*    # 列出所有参数,用 IFS 的第一个字符分隔;
$@    # $* 的一种变体,不受 IFS 影响;

# 变量;
echo "$HOMT" # 双引号可以解析变量,比较运算最好加上;
echo $HOME
echo /$HOME  # 反斜杠不解析变量,单引号同理;
echo '$HOME'

# 条件命令和语句(test 或 [);
if test -f fred.c
then
  echo 0
else 
  echo 1
fi

if [ -f fred.c ]
then
  echo 0
elif [ -g fred.c ]
then 
  echo 1
fi

# 循环语句(只列了常用的两种);
for item in foo bar
do 
  echo $item
done

for file in $(ls -al *.sh)
do 
  echo $file
done

read str
while [ "$str" != "go" ]
do
  echo "retry, please"
done


# 选择语句;
read choice
case "$choice" in
  apple) echo "Apple";;
  banana) echo "Banana";;
esac

case "$choice" in
  apple | banana) echo "Fruit";;
  beef | pork) echo "Meat";;
esac

# 命令列表;
[] && []  # 形式码;
[] || []  # 形式码;

# 函数;
my_function() {
  local answer='three'
  echo -n "Please enter a number:"
  read input
  if [ "$answer" = "$input" ]
  then
    echo "Good Job!"
  fi
}

# 其他命令;
break     # 退出循环;
continue  # 退出本次循环;
:         # 空命令(一般用在死循环中);

while :
do 
  echo "Eternal"
done

x=$(($x+1))        # 算数扩展;

${x}               # 参数扩展(保护变量);
${param:-default}  # 带有默认值的参数扩展;
${#param}          # 给出参数长度;
${param%word}      # 尾部删除与特定值匹配的最小部分,返回剩下;
${param%%word}     # 尾部删除与特定值匹配的最大部分,返回剩下;
${param#word}      # 头部删除与特定值匹配的最小部分,返回剩下;
${param##word}     # 头部删除与特定值匹配的最大部分,返回剩下;

下面记录一些常用命令:

lsof -i:8080                      # 列出使用8080端口的进程;
df -h                             # 查看系统磁盘使用情况;
du -h --max-depth=1               # 列出第一层目录记文件的使用大小;
ssh [ip] -l [username] -p [port]  # SSH 远程登录;
npm view [module] versions        # 查看某一 NPM 模块的所有可用版本  ; 
npm install [modules]@[version]   # 安装某一版本的 NPM 模块;
npm outdated -g                   # 列出全局 NPM 包的过期版本情况;
npm outdated                      # 列出当前项目的 NPM 包过期版本情况;

clang -x c -v -E /dev/null        # Clang/Gcc 默认的头文件加载搜索路径;

# 查看 Linux 版本信息;
cat /etc/issue
sudo lsb_release -a



评论 | Comments


Loading ...