shell 命令: 一些小技巧

前端之家收集整理的这篇文章主要介绍了shell 命令: 一些小技巧前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
  • if 判断后面的返回值,不论后面是test 还是其他什么,返回值是0 就成立. 同理,while 后面也可以跟test. if test …; then … fi while test …; do … done

  • less cat set 等等命令后面,可以跟 ‘–’ 的参数,表示后面不再有参数了. 如果文件名是 ‘-abc’,cat -abc 会被解释为参数,用 cat – -abc 就会当做文件

  • set 是很好用的函数,set – $(echo “a b c”),会把内置变量\$1 改成a,\$2 改成b,\$3 改成c

  • sh -x test.sh 用于调试脚本

  • cat … | while read line; do … done 或者 while read line; do … done < cat …

  • 一个用来锁定终端的脚本

#!/bin/bash 
trap '' 1 2 3 20 # trap 命令捕获这些幸好,防止用户通过ctrl-c ctrl-z 终止脚本
stty -echo # 终端不回显
read -p "key: " key_1
echo
read -p "again: " key_2
echo
key_3=''
if test "$key_1" == "$key_2"
then
    tput clear # 清屏幕
    until test "$key_3" == "$key_2"
    do
        read key_3
    done
else
    echo "key not match,not locked" 1>&2
fi
stty echo
  • echo -n “abc” 不换行 echo -e “abc\n” 会把\n 转换成换行 -e 选项会解释转义字符,用双引号”\n” 就不会被shell 解释,但会被echo -e 解释

  • cd (dirname$0)cd.echo (basename $0) 脚本名

  • Here 文档,这是个很好玩的东西,脚本搜索脚本本身

# sh find.sh 123
grep -i "$1" <<+
abc 123
def 456
ghi 789
+
  • 文件描述符: 0 表示标准输入,1 表示标准输出,2 表示标准错误. 重定向: echo abc > /dev/null 2>&1 ; 标准错误写入标准输出,标准输出写入/dev/null

  • Linux 里面的过滤器,我特别喜欢tr,可以用来做替换,也可用来删除. tr -d ‘\r’ 把windows 的行结束符换成unix 的结束符. sed 也可以写,但是没有tr 简短.

  • 下面这段是网上找的,很有用

$0 这个程式的执行名字 
$n 这个程式的第n个参数值,n=1..9 
$* 这个程式的所有参数,此选项参数可超过9$@$*类似,但是可以当作数组用 
$# 这个程式的参数个数 
$$ 这个程式的PID(脚本运行的当前进程ID号) 
$! 执行上一个背景指令的PID(后台运行的最后一个进程的进程ID号)   
$? 执行上一个指令的返回值 (显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误) 
$- 显示shell使用的当前选项,与set命令功能相同

上面 $* 和 $@ 可以一样用,但是加上双引号的时候就不一样了,“$*” 是一个参数,“$@” 是多个参数

  • 还有一个厉害的写法,也是网上找的
假设我们定义了一个变量为:
file=/dir1/dir2/dir3/my.file.txt
可以用${ }分别替换得到不同的值:
${file#*/}:删掉第一个/及其左边的字符串:dir1/dir2/dir3/my.file.txt
${file##*/}:删掉最后一个/及其左边的字符串:my.file.txt
${file#*.}:删掉第一个.及其左边的字符串:file.txt
${file##*.}:删掉最后一个.及其左边的字符串:txt
${file%/*}:删掉最后一个/及其右边的字符串:/dir1/dir2/dir3
${file%%/*}:删掉第一个/及其右边的字符串: ${file%.*}:删掉最后一个.及其右边的字符串:/dir1/dir2/dir3/my.file
${file%%.*}:删掉第一个.及其右边的字符串:/dir1/dir2/dir3/my 记忆的方法为: # 是去掉左边(键盘上#在 $ 的左边) % 是去掉右边(键盘上% 在$ 的右边)
单一符号是最小匹配;两个符号是最大匹配
${file:0:5}:提取最左边的0~5个字符/dir1
${file:5:5}: 从第5个字符开始,提取5个字符 /dir2,这个跟cut -c 5-10 效果一样
  • 自定义文件描述符: exec 123> abc.txt; echo abc >& 123; 就会把abc 追加到abc.txt 文件末尾. 注意是追加,没有覆盖.

  • pwdx pid 可以打印进程的执行文件路径

  • xargs 是非常强的命令,常用写法: ls * | xargs -I {} cp {} {}.bk

  • 怎样反序输出一个文件: 可以用tac 命令,就是cat 反过来. 也可以用 sed -n ‘1!G;h;$p’ 命令. 这里要解释一下各个命令的含义:

g: 将hold space中的内容拷贝到pattern space中,原来pattern space里的内容清除
G: 将hold space中的内容append到pattern space\n后
h: 将pattern space中的内容拷贝到hold space中,原来的hold space里的内容被清除
H: 将pattern space中的内容append到hold space\n后
x: 交换pattern space和hold space内容
sed 常用技巧: [coolshell](http://coolshell.cn/articles/9104.html)
原文链接:https://www.f2er.com/bash/392877.html

猜你在找的Bash相关文章