shell脚本杂记(一)

1,登陆系统时,$代表普通用户,#代表管理员用户
2,执行多个命令时cmd1;cmd2 使用分号隔开
3,ehco -e "abc\nabc" 转换转义字符,会生成两个换行
4,拼接环境变量例子:export PATH="$PATH:/home/user/bin"
5,获取字符串的长度:
[code="java"]# var="abc" ; echo ${#var}
3
# var="abdc" ; echo ${#var}
4
# var="中国人" ; echo ${#var}
3
#
[/code]

5,识别当前的shell:
[code="java"]# echo $SHELL
/bin/bash
# echo $0
-bash
# [/code]
6,检测当前的用户是否为超级用户:

if [ $UID -eq 0 ] ; then
echo "是root用户"
else
echo "不是超级用户"

fi


超级用户的UID为0

7,定义别名,查看别名使用alias -p,定义别名的例子:alias cp='cp -i'

8,tput cols 和tput lines 分别是获取终端的行数和列数,tput longname获取终端名字

9,
(1)获取日期date
(2)打印纪元时,date+%s
(3)检测一组命令花费时间可用如下的代码:

start=$(date +%s)

echo "哈喽"
sleep 3

end=$(date +%s)


r=$(( end - start ))


echo "程序花费时间为$r秒"



10,调式脚本bash -x script.sh
11,
(1)不使用回车键来读取n个字符,read -n 2 var
(2)用无回显的方式读取密码: read -s var
(3)显示提示信息: read -p "请输入: " var
(4)在特定时间内读取输入: read -t time var
(5)用特定的定界符作为输入行的结束: read -d ":" var ,当用户在控制台输入冒号时这个输入就代表结束了


12,比较测试

eq 等于
ne 不等于
gt 大于
lt 小于
ge 大于或等于
le 小于或等于
-a 逻辑与
-o 逻辑或
判断字符串相等使用 [[ $a = $b ]] 也可以 [[ $a == $b]]
不相等使用 [[$a != $b ]]


13,文件系统测试

-f 是否为文件
=x 可执行
-d 是否为目录
-e 是否存在
-c 是否为字符设备
-b 块设备
-w 文件可写
-r 文件可读
-L 是否为符号链接


14,
cat拼接文件 cat file1 file2 ....
cat -s 忽略多余的空行
cat -n 打印行号

15,录制脚本使用序列
script -t 2> timing.log -a output.session
播放序列:
scriptreplay timing.log output.session

16, find . -print 打印文件和目录列表
find /home -name "*.txt -print 通配符打印
find . -iname "abc* -print 忽略大小写
查找两个文件 find . \( -name "*.txt" -o -name "*.pdf" \) -print
find /home -path "*/abc/*" -print 可以在路径里面查找,-name可以在文件名里面查询

除此之外还支持,正则查询


find ! -name "*.txt" -print 排除用法


find . -maxdepth 1 -name "f*" -print 基于深度的查询

find . -mindepth 1 -name "f*" -print 基于深度的查询

find . -type d -print 按文件类型过滤

f 普通文件
l 符号链接
d 目录
c 字符设备
b 块设备
s 套接字
p fifo

按时间搜索
-atime 用户最近一次的访问时间
-mtime 文件内容最后一次被修改的时间
-ctime 文件元数据最后一次变化的时间

find . -type f -atime -7 -print 最近7天,访问过的文件

find . -type f -atime 7 -print 恰好7天访问的文件


find . -type f -atime +7 -print 超过7天 访问过的文件


-amin 访问时间
-mmin 修改时间
-cmin 变化时间

find . -type f -amin +7 打印访问时间超过7分钟的


find . -type f -newer file.txt -print 打印比file.txt修改时间更近的文件


按文件大小查询

b 块 512字节
c 字节
w 字 2字节
k 1024字节
M 1024k字节
G 1024M字节

find . -type f -size +2k 查找大于2kb的文件

find . -type f -size -2k 查找小于2kb的文件

find . -type f -size 2k 查找等于2kb的文件


查找并删除文件:


find . -type f -name "*.txt" -delete


find . -type f -perm 644 -print 查找权限的匹配


find . -type f -user search -print 查找用户search下的文件


下面来看下xargs来格式化,参数:

[code="java"]# cat aa.txt
1 2 3 4 5 6
7 8 9 10
11 12
# cat aa.txt | xargs
1 2 3 4 5 6 7 8 9 10 11 12
# cat aa.txt | xargs -n 3
1 2 3
4 5 6
7 8 9
10 11 12
# [/code]

[code="java"]# echo "anbnc" | xargs -d n
a b c

# [/code]

使用-d命令,自己指定定界符

[code="java"]# echo "anbnc" | xargs -d n -n 1
a
b
c

#
[/code]

-n可以指定每行显示几个字符


下面看下tr命令


转换大小写
[code="java"]
# echo "i am CAT" | tr 'A-Z' 'a-z'
i am cat
#
[/code]


加密映射:
echo "12354" | tr '0-9' '987456213'
解密
echo "12354" | tr '987456213' '0-9‘


删除指定内容集合

[code="java"]# echo "cat 12 adf 3 " | tr -d '0-9'
cat adf
# [/code]


16 , 文件校验和 md5sum

17, 排序,去重,统计 sort , uniq , c

18,随机数命令 mktmp test.XXXXX

19,分割文件 split 可以按大小和行数

20,利用多进程并行提高执行效率

[code="java"]# cat bcc.sh


#存储进程号数组
PIDS=()


for file in a.txt b.xt
do

#生成md5校验和
md5sum $file &


#获取进程号,存进数据
PIDS+=("$!")


done


#阻塞等待所有任务完成
wait ${PIDS[@]}
# [/code]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值