惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google DeepMind News
Google DeepMind News
T
Threatpost
T
Tor Project blog
S
Schneier on Security
Project Zero
Project Zero
Know Your Adversary
Know Your Adversary
P
Proofpoint News Feed
K
Kaspersky official blog
P
Privacy International News Feed
Latest news
Latest news
Cisco Talos Blog
Cisco Talos Blog
T
The Exploit Database - CXSecurity.com
The Hacker News
The Hacker News
D
Docker
aimingoo的专栏
aimingoo的专栏
S
Securelist
C
Cyber Attacks, Cyber Crime and Cyber Security
Spread Privacy
Spread Privacy
TaoSecurity Blog
TaoSecurity Blog
T
The Blog of Author Tim Ferriss
T
Threat Research - Cisco Blogs
Simon Willison's Weblog
Simon Willison's Weblog
博客园 - 三生石上(FineUI控件)
人人都是产品经理
人人都是产品经理
Security Latest
Security Latest
V
Visual Studio Blog
WordPress大学
WordPress大学
J
Java Code Geeks
O
OpenAI News
T
Tailwind CSS Blog
S
Secure Thoughts
G
Google Developers Blog
博客园_首页
The Cloudflare Blog
The Register - Security
The Register - Security
A
Arctic Wolf
Y
Y Combinator Blog
阮一峰的网络日志
阮一峰的网络日志
B
Blog RSS Feed
IT之家
IT之家
美团技术团队
D
Darknet – Hacking Tools, Hacker News & Cyber Security
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
G
GRAHAM CLULEY
S
Security Affairs
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Application and Cybersecurity Blog
Application and Cybersecurity Blog
P
Palo Alto Networks Blog
C
CERT Recently Published Vulnerability Notes
W
WeLiveSecurity

希仁之拥

领克900半年使用体验 | 希仁之拥的博客 Ubuntu 26.04 Desktop使用体验 | 希仁之拥的博客 【转载】谈谈不受欢迎的博客技术特征 | 希仁之拥的博客 【转载】ClaudeCode 你想知道的所有秘密,源码深度研究报告 | 希仁之拥的博客 2025年年终总结 | 希仁之拥的博客 集成和使用Openclaw后的思考 | 希仁之拥的博客 我买了领克900 | 希仁之拥的博客 服务器性能优化之io拷贝 | 希仁之拥的博客 Go-Sail导航站上线啦 | 希仁之拥的博客 今年国庆的一些感受 [2025] | 希仁之拥的博客 在Deepin 25上配置forticlient | 希仁之拥的博客 分享一些酷酷的站点 [20250908] | 希仁之拥的博客 Go-Sail发布v3.0.6版本了 | 希仁之拥的博客 我对V2EX发布$V2EX讨论的一些感受 | 希仁之拥的博客 如何让Stripe支持支付宝和微信支付 | 希仁之拥的博客 2025上半年里程碑 | 希仁之拥的博客 GitLab+Drone使用体验 | 希仁之拥的博客 四姑娘山之旅 | 希仁之拥的博客 近来帮同事做性能优化的过程回顾 | 希仁之拥的博客 聊聊接口的返回数据结构 | 希仁之拥的博客 由GORM的Updates语法糖 我把 Go-Sail 的文档站更新了 | 希仁之拥的博客 这就是我为什么讨厌拼多多 | 希仁之拥的博客 元旦快乐~ | 希仁之拥的博客 致敬还在写博客的我们 | 希仁之拥的博客 逐步的把图片资源迁移到星光图床上 | 希仁之拥的博客 帮弟弟配了一台mini主机 | 希仁之拥的博客 国庆的一些碎碎念 | 希仁之拥的博客 就这一刻而言,我觉得科技冷冰冰的。 | 希仁之拥的博客 如何使用acme.sh自动续签证书 | 希仁之拥的博客 Go-Sail的文档站点搭建好了 | 希仁之拥的博客 我的第一个谷歌浏览器插件发布成功啦! | 希仁之拥的博客 我开源了一个golang的web框架 | 希仁之拥的博客 流芳 | 希仁之拥的博客 第一次开发微信小程序 | 希仁之拥的博客 春节快乐 | 希仁之拥的博客 我把博客站点重写了 | 希仁之拥的博客 阆中古城 | 希仁之拥的博客 入了把Keydous NJ80 | 希仁之拥的博客 Mac上有用的知识 | 希仁之拥的博客 记一次服务器被攻击 | 希仁之拥的博客 Ubuntu server不停机扩容系统盘 | 希仁之拥的博客 端午安康 | 希仁之拥的博客 搭建hadoop伪分布式集群总结 | 希仁之拥的博客 在goa框架中,如何访问原始请求数据 | 希仁之拥的博客 postgresql相关操作笔记 | 希仁之拥的博客 golang解析带命名空间的xml数据(带冒号的节点或属性名) | 希仁之拥的博客 【转载】解决deepin环境下wine QQ无法接收图片问题 | 希仁之拥的博客 杂项笔记 | 希仁之拥的博客 Mac如何修改通知横幅消失时间 | 希仁之拥的博客 Golang校验结构体是否实现了接口 | 希仁之拥的博客 关于deepin os的大半年使用体验 | 希仁之拥的博客 有态度的翻唱 | 希仁之拥的博客 【转载】Golang 在 Mac、Linux、Windows 下如何交叉编译 | 希仁之拥的博客 和幺幺一起成长的半年时光 | 希仁之拥的博客 Element UI中message消息提示实现原理 | 希仁之拥的博客 从predis组件开始了解如何与redis服务交互 | 希仁之拥的博客 【转载】 尤雨溪谈Vue.js :缔造自由与真我 | 希仁之拥的博客 【转载】百万 Go TCP 连接的思考: epoll方式减少资源占用 | 希仁之拥的博客 【分享】移除git中的commit历史(保留文件,仅移除提交历史信息) | 希仁之拥的博客 【分享】Ruby 之父松本行弘:程序员的乐趣、存在感与平衡 | 希仁之拥的博客 安利一下我用过的一些sublime text 3工具、插件及配置 | 希仁之拥的博客 PHP处理苹果内购数据验证 | 希仁之拥的博客 PHP获取XML所有节点名称 | 希仁之拥的博客 Sentinel::check() 在Laravel5.3版本之后总是返回false的解决方案 | 希仁之拥的博客 吃货的美食集,持续更新~ | 希仁之拥的博客 第二十一届成都汽车博览会 | 希仁之拥的博客 马云宣布1年后卸任集团董事局主席 由CEO张勇接任 | 希仁之拥的博客 nginx配置非443端口的https连接 | 希仁之拥的博客 PHP7 异常类型列表 | 希仁之拥的博客 【分享】《燃点》:不被嘲笑的愿望是不值得去实现的|一部属于创业者的电影 | 希仁之拥的博客 【分享】前端资源加载优先级[译] | 希仁之拥的博客 【小技巧】Laravel动态配置多个数据库连接 | 希仁之拥的博客 php使用ftp上传、下载文件 | 希仁之拥的博客 php使用mysqlnd扩展进行mysql异步并行查询 | 希仁之拥的博客 基于以太坊区块链,使用web3.js在geth服务器上执行合约方法以及事件监听 | 希仁之拥的博客 Smartisan OS | 希仁之拥的博客 母校 | 希仁之拥的博客 php后期静态绑定 | 希仁之拥的博客 [mysql优化]子查询与连接查询 | 希仁之拥的博客 PHP常见运行模式及原理 | 希仁之拥的博客 mysql用户与授权 | 希仁之拥的博客 如何在ubuntu14.04上安装composer | 希仁之拥的博客 关于mews/captcha for laravel存在method [validateCaptcha] doesn't exists解决方法 | 希仁之拥的博客
shell学习笔记 | 希仁之拥的博客
希仁之拥 · 2018-11-14 · via 希仁之拥
#################
#     变量
#################

# --表达式赋值给变量
value=`expr 1 + 2`

echo "两数之和为: $value"

# --乘法较为特殊
value_div=`expr 1 \* 2`

echo "两数之积为: $value_div"

# --变量计算
variable_cal=$[ value + value_div ] #等号两边不能有空格
echo $variable_cal
#################
#    流程控制
#################

# --流程控制 if else
if [ $value != $value_div ]; then
    echo "value值不等于value_div"
else
    echo "value值等于value_div"    
fi

# --流程控制 if else-if else
:<<EOF
if condition1
then
    command1
elif condition
then
    command2
else
fi
EOF
# --多行注释
:<<EOF
我在这里注释了一段很长的话
这段话是一段多行的提示性文字
...
EOF
# --数组声明及元素访问等
array=("h" "e" "l" "l" "o" "world")

echo "[1] 数组array的所有元素为:${array[@]}"
echo "[2] 数组array的所有元素为:${array[*]}"
echo "数组array的元素个数为:${#array}"
echo "数组array的第二元素个数为:${array[1]}"
echo "数组array的最后一个元素的长度为:${#array[5]}"

# --流程控制 for循环
echo "当前文件夹下的文件名称:"
echo "=============================================="
for filename in `ls ./`
do
    echo "${filename}"
done    
echo "=============================================="

# --流程控制 for in
:<<EOF
for var in item1 item2 item3 ... itemN
do
    command
done
EOF

# --流程控制 while循环
echo "输出小于等于5的正整数:"
int=1
while((int<=5))
do
    echo $int
    let "int++" #bash let用于执行一个或多个表达式
done    

# --while可用于读取键盘信息
echo "按下 <ctrl + d>退出"
echo -n "请输入任意一个字符:"
while read FILM
do
    echo "你输入的是: ${FILM}"
done   

# --流程控制 until循环 
# until 循环执行一系列命令直至条件为 true 时停止。
# until 循环与 while 循环在处理方式上刚好相反。
:<<EOF
until condition
do
    command
done
EOF

# --无限循环
:<<EOF
while :
do
    command
done

#------------
while true
do
    command
done    

#------------
for (( ; ; ))
EOF

# --breakcontinue可用于结束循环和跳出当前循环
##################
#    echo 命令
##################

# 显示普通字符串
echo "normal string"

# 显示转义字符串
echo "Say \"hello\"!"

# 显示换行 -e 开启转义
echo -e "Mission complete!\n"

# 显示不换行 \c 不换行
echo "First line \c"
echo "Second line" # result: First line Second line

# 内容定向至文件(覆盖)
echo "String..." > ./override_string.log

# 内容定向至(追加)
echo "String..." >> ./append_string.log

# 显示命令执行结果
echo `date`
##################
#    read 命令
##################

# 输入提示文字
read -p "请输入一段字符:"

# 输入字符长度限制
read -n 6 #长度为6位

# 输入超时限制
read -t 6 #超时时长6秒

# 输入隐藏内容
read -s password
echo "input password: ${password}"
##################
#    test 命令
##################

# 数值测试
:<<EOF
参数      说明
-eq     等于则为真
-ne     不等于则为真
-gt     大于则为真
-ge     大于等于则为真
-lt     小于则为真
-le     小于等于则为真
EOF
number1=100
number2=200

if test $[number1] -eq $[number2]
then
    echo "两个数不相等"
else
    echo "两个数相等"
fi

# 字符串测试
:<<EOF
参数      说明
=       等于则为真
!=      不相等则为真
-z 字符串      字符串的长度为零则为真
-n 字符串      字符串的长度不为零则为真
EOF

string1="abc"
string2="bcd"

if test $string1 = $string2
then
    echo "两个字符串相等"
else
    echo "两个字符串不相等"
fi

# 文件测试
:<<EOF
参数      说明
-e 文件名      如果文件存在则为真
-r 文件名      如果文件存在且可读则为真
-w 文件名      如果文件存在且可写则为真
-x 文件名      如果文件存在且可执行则为真
-s 文件名      如果文件存在且至少有一个字符则为真
-d 文件名      如果文件存在且为目录则为真
-f 文件名      如果文件存在且为普通文件则为真
-c 文件名      如果文件存在且为字符型特殊文件则为真
-b 文件名      如果文件存在且为块特殊文件则为真
EOF

if test -e ./override_string.log
then
    echo "override_string.log文件存在"
else
    echo "override_string.log文件不存在"
fi

# 另外,Shell还提供了与( -a )、或( -o )、非( ! )三个逻辑操作符用于将测试条件连接起来,
# 其优先级为:"!"最高,"-a"次之,"-o"最低
# 与 或 非
if test -e ./override_string.log -o -e ./append_string.log
then
    echo '至少有一个文件存在!'
else
    echo '两个文件都不存在'
fi
##################
#    函数
##################

# 定义一个函数
funcEchoString(){
    echo "这是一个函数"
}

echo "==========函数执行开始==========="
funcEchoString
echo "==========函数执行结束==========="

# 带返回值的函数
funcWithReturn(){
    func_value1=1
    func_value2=2
    return ($func_value1+$func_value2)
}
echo "==========函数执行开始==========="
funcWithReturn
echo "函数的执行结果是: $?" #函数返回值在调用该函数后通过 $? 来获得
echo "==========函数执行结束==========="

# 函数参数
funcWithParam(){
    echo "调用此函数的第一个参数是 ${1} "
    echo "调用此函数的第二个参数是 ${2} "
    #...
    echo "调用此函数的所有参数是 $* " #所有参数组成的字符串
    echo "调用此函数的所有参数个数是 $# "
}
echo "==========函数执行开始==========="
funcWithParam 1 2 3
echo "==========函数执行结束==========="

:<<EOF
参数处理        说明
$#      传递到脚本的参数个数
$*      以一个单字符串显示所有向脚本传递的参数
$$      脚本运行的当前进程ID号
$!      后台运行的最后一个进程的ID号
$@      与$*相同,但是使用时加引号,并在引号中返回每个参数。
$-      显示Shell使用的当前选项,与set命令功能相同。
$?      显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
EOF
##################
#    文件包含
##################

. ./other_shell.sh # 注意点号(.)和文件名中间有一空格

# 

source ./other_shell.sh
##################
#  输入/输入重定向
##################

:<<EOF
命令      说明
command > file      将输出重定向到 file。
command < file      将输入重定向到 file。
command >> file     将输出以追加的方式重定向到 file。
n > file        将文件描述符为 n 的文件重定向到 file。
n >> file       将文件描述符为 n 的文件以追加的方式重定向到 file。
n >& m      将输出文件 m 和 n 合并。
n <& m      将输入文件 m 和 n 合并。
<< tag      将开始标记 tag 和结束标记 tag 之间的内容作为输入。
EOF
# 文件描述符 0 通常是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)
# 一般情况下,每个 Unix/Linux 命令运行时都会打开三个文件:
#   标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。
#   标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。
#   标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。

# 如果希望将 stdout 和 stderr 合并后重定向到 file,可以这样写:
echo "string" > file 2>&1
# 或者
echo "string" >> file 2>&1
# 这里的&没有固定的意思
# 放在>后面的&,表示重定向的目标不是一个文件,而是一个文件描述符
# 而&>file是一种特殊的用法,也可以写成>&file,二者的意思完全相同
# 此处&>或者>&视作整体,分开没有单独的含义
#################
#     sed命令
#################

# 查找替换
sed 's/hello/hi/g' example-file.txt
# 执行批量命令
sed -e 's/hello/hi/g' -e 's/world/century/g' example-file.txt
# 替换原文件
sed -i -e 's/hello/hi/g' -e 's/world/century/g' example-file.txt
#################
#     awk命令
#################
awk -F '分隔符' '/正则表达式/{action动作}' 文件
awk -F ':' '/root/{print $1}' /etc/passwd
# output: root

980_120.png(via stardots.io)