欢迎光临
我们一直在努力

Shell脚本常用的基础记录

下面的例子都是在ubuntu20.04下输出的结果

新建test.sh

#!/bin/bash
echo "hello world!"
echo $0  #脚本自身名字,输出test.sh
echo $?  #返回上一条命令是否执行成功,0为执行成功,非0则为执行失败,输出0
echo $$  #当前进程PID,输出420670
echo $SHELL  #默认 Shell,输出/bin/bash
echo $HOME  #当前用户家目录,输出/home/hqhyco
echo $LANG  #默认语言,输出zh_CN.UTF-8
echo $PWD  #当前目录,输出/home/hqhyco
echo $UID  #当前用户ID,输出1000
echo $USER  #当前用户名,输出hqhyco
cat /proc/sys/kernel/random/uuid  #随机输出uuid
cat /etc/hostname  #主机名
cat /proc/sys/kernel/hostname  #也是主机名
cat /proc/sys/kernel/osrelease  #内核版本号,输出5.4.0-42-generic
cat /proc/sys/kernel/ostype  #操作系统类型,输出Linux
uname #操作系统类型,也输出Linux
touch {0..10}.log  #创建10个log文件
lsof -i:80  #列出 80 端口监听的进程
wget --no-check-certificate https://123.com/123.txt -O 456.txt #重命名下载的文件,最好加个--no-check-certificate

#读取用户输入,可以加多个变量,空格隔开,-p是允许在read命令行中直接指定一个提示
read -p "Enter your name:" name  
echo "hello $name, welcome to my program"  
# 笨笨的检测方法
if [[ $(command -v apt-get) ]]; then
  cmd="apt-get"
elif [[ $(command -v yum) ]]; then
  cmd="yum"
else
  echo "哈哈……这个辣鸡脚本不支持你的系统。 (-_-)"
  echo "备注: 仅支持 Ubuntu 16+ / Debian 8+ / CentOS 7+ 系统" && exit 1
fi
# 加了双引号才能正常判断是否为空
# [ -z "$a" ] && echo yes || echo no
yes
# [ -n "$a" ] && echo yes || echo no
no
# 使用了双中括号就不用了双引号
# [[ -n $a ]] && echo yes || echo no
no
# [[ -z $a ]] && echo yes || echo no
yes

tee

#打印并追加到文件:
echo 123 |tee -a a.log

tail

#打印文件后 50 行:
tail -n 50 file
#实时输出新增行:
tail -f file

find

#功能:目录层次结构中搜索文件
#格式:find path -option actions
#在当前目录以及子目录找txt文件,name后面最好加""
find ./ -name *.txt
#不加"",找sh文件会提示错误
find ./ -name "*.sh"
#在当前目录以及子目录找像1a,5a,ab这样的文件
find ./ -name ?a
#在当前目录以及子目录找像111a,52a,ab这样的文件
find ./ -name *a
#查找大于 1024k 的文件:
find ./ -size +1024k
#查找小于 1024k 的文件:
find ./ -size -1024k
#排除多个类型的文件:
find ./ ! -name "*.sql" ! -name "*.txt"
#查找多个类型的文件,-o就是or的意思
find ./ -name '*.sh' -o -name '*.bak'
find ./ -name "*.sh" -o -name "*.bak"
find ./ -regex ".*\.sh\|.*\.bak"
find ./ -regex ".*\.\(sh\|bak\)"
#并且条件查找大于1024k的文件,-a就是and的意思
find ./ -name "*.sql" -a -size +1024k
#只显示第一级目录,-type 文件类型,d 目录,f 常规文件等
find ./ -type d -maxdepth 1
#查找文件名并且文件类型删除
find ./ -name "?.log" -type f -delete

xargs

#功能:从标准输入执行命令
#创建10个文件
touch {0..9}.log
#用xargs删除
find ./ -name "?.log" | xargs rm -f

cut

#打印 b 字符:
echo "abc" |cut -b 2
#输出 b
#截取 abc 字符:
echo "abcdef" |cut -c 1-3
#输出 abc
#以冒号分隔,显示第二个字段:
echo "a:b:c" |cut -d: -f2
#输出 b

scp

# SSH 的安全远程服务器文件拷贝
#本地目录推送到远程主机,src是本地,dst是远程
scp -P 22 -r src_dir [email protected]:/dst_dir
#远程主机目录拉取到本地
scp -P 22 -r [email protected]:dst_dir src_dir

rsync

#远程或本地文件同步工具
#本地复制目录:
rsync -avz abc /opt
#本地目录推送到远程主机:
rsync -avz SRC [email protected]:DST
#远程主机目录拉取到本地:
rsync -avz [email protected]:SRC DST
#保持远程主机目录与本地一样:
rsync -avz --delete SRC [email protected]:DST
#排除某个目录:
rsync -avz --exclude=no_dir SRC [email protected]:DST
#指定 SSH 端口:
rsync -avz /etc/hosts -e "ssh -p22" [email protected]:/opt
 收藏 (0) 打赏

您可以选择一种方式赞助本站

支付宝扫一扫赞助

微信钱包扫描赞助

未经允许不得转载:家里蹲的狐狸 » Shell脚本常用的基础记录

分享到: 生成海报
avatar

评论 抢沙发

  • QQ号
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

登录

忘记密码 ?

切换登录

注册

我们将发送一封验证邮件至你的邮箱, 请正确填写以完成账号注册和激活