bash黑魔法(TBC)

jcurl

function jcurl {; curl ${@} | python3 -c 'from json import loads as l; from pprint import pprint as p; from sys import stdin as s; p(l(s.read()));' | highlight --syntax py -O ansi | sed s/'\(\x1b\[00;\)3\(.m\)'/'\19\2'/g };

function jcurl {
  curl ${@} \
  | python3 -c 'from json import loads as l; from pprint import pprint as p; from sys import stdin as s; p(l(s.read()));' \
  | highlight --syntax py -O ansi \
  | sed s/'\(\x1b\[00;\)3\(.m\)'/'\19\2'/g \
  | dd
}
function jcurl {; curl ${@} | python3 -c 'from json import loads as l; from pprint import pprint as p; from sys import stdin as s; p(l(s.read()));' | highlight --syntax py -O ansi | sed s/'\(\x1b\[00;\)3\(.m\)'/'\19\2'/g };

优点

调用pprint模块 高度定制

缺点

  • pprint不能输出json格式, 仅用于终端显示.
  • highlight需要额外安装
  • * sed的语法不友好

PS1 美化终端

PS1='\n\[\e[31;1m\]#\[\e[0m\] \[\e[32;1m\]\u\[\e[0m\]@\[\e[34;1m\]\h\[\e[0m\]:\[\e[33;1m\]\w\[\e[0m\] \[\e[35;1m\]\D{%Y-%m-%d %H:%M:%S}\[\e[0m\]\n\[\e[31;1m\]+\[\e[0m\]

简化版
PS1='\[\e[35;1m\]\D{%H:%M:%S}\[\e[0m\] \[\e[32;1m\]\u\[\e[0m\]@\[\e[34;1m\]\h\[\e[0m\]:\[\e[33;1m\]\W\[\e[0m\] \[\e[31;1m\]\$\[\e[0m\] '

bash 的 for/while/until 循环

写法1 换行
windows编辑的文件\n\r结尾必须替换掉\r!!!

for item in sequence
do
binary --key=value
binary --key=value
done

写法2 一行
do 和第一条语句之间没有分号!!!
结尾分号不能省!!!

for item in sequence; do binary --key=value; binary --key=value; done;

while

while [ test_expression_true ]; do binary; done;
while test_return_value; do binary; done;

until

until [ test_expression_true ]; do binary; done;
until test_return_value; do binary; done;

bash 的 case

实际上, bash中一切变量都是字符串, 包括bash的一维数组. 如果不以bash一维数组的特殊语法引用变量, 那么将得到整个数组的字符串

case variable in  
    pattern)
        binary
    pattern)
        binary
        ;;  # 相当于break
    pattern|pattern|pattern)
        binary  # |相当于或
        ;;
    pattern)
        binary
        ;;
    *)
        binary  # default
        ;;
esac

花括号扩展

Bash 允许你使用花括号扩展字符或数字序列。例如,echo file{1..3}.txt 将输出 file1.txt file2.txt file3.txt

当然,我很乐意分享一些高级的 Bash 技巧!

  1. 使用 $( ) 或 进行命令替换:
    您可能已经了解了 $( ) 语法进行命令替换。但是您是否知道您也可以使用反引号 语法来实现相同的功能?

例如:

echo "今天是 $(date +%A)"
echo "明天是 `date -d '+1 day' +%A`"

这两个命令都将输出星期几,第一个使用 $( ) 语法,第二个使用 语法。

  1. 数组操作:
    Bash 还支持数组,这对于组织数据非常有用。您可以使用语法 my_array=(element1 element2 element3) 声明一个数组。您可以使用语法 my_array[index] 访问数组元素。

例如:

my_array=(apple banana cherry)
echo ${my_array[0]}
echo ${my_array[@]}
# 提示, for ele in my_array 效果相同
  1. 进程替换:
    进程替换允许您将命令的输出视为文件。您可以使用语法 <(command) 将命令的输出作为文件传递给另一个命令。
diff <(ls /tmp) <(ls /var/tmp)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值