linux下的shell命令学习笔记010
#! /bin/bash
# Program:
#本脚本针对test的一些常用命令进行测试
#1.数值比较
#(单词:less than小于; greater than大于; equal相等)
# n1 -eq n2 # 检查n1和n2是否相等
# n1 -ne n2 # 检查n1和n2是否不相等
# n1 -ge n2 # 检查n1是否大于或等于n2
# n1 -le n2 # 检查n1是否小于或等于n2
# n1 -gt n2 # 检查n1是否大于n2
# n1 -lt n2 # 检查n1是否小于n2
#
#2.字符串比较
# str1 == str2 # 检查str1是否和str2相等
# str1 != str2 # 检查str1是否和str2不相等
# str1 < str2 # 检查str1是否小于str2
# str1 > str2 # 检查str1是否大于str2
# -n str1 # 检查str1长度是否非0
# -z str1 # 检查str1长度是否为0
#
#3.文件比较
#(并没有列举完毕,仅仅列举了常用的)
# -e file #判断file是否存在
# -d file #判断file是否存在并且是一个目录
# -f file #判断file是否存在并且是一个文件
#
# -r file #判断file是否存在并且可读
# -w file #判断file是否存在并且可写
# -x file #判断file是否存在并且可执行
# -s file #判断file是否存在并且非空
#
# -O file #判断file是否存在并属当前用户所有(Owner)
# -G file #判断file是否存在并且默认组和当前用户相同(Group)
#
# file1 -nt file2 #判断file1是否比file2新 (new)
# file1 -ot file2 #判断file1是否比file2旧 (old)
#
#4.其他
#! #例如 test ! -e file 当file不存在时,该条件成立
# History:
# 2017/12/30 Orig Fisrt Release
read -t 3 -p "Please Write the Number: " num
# err1: 若超时,则退出
if [ $? != 0 ];then
echo "Error 1:输入超时!" | grep --color=auto 'Error 1:'
exit 1
fi
# err2: 若输入为空,则退出
if [ -z "$num" ];then
echo "Error 2:没有输入数据" | grep --color=auto 'Error 2:'
exit 2
fi
# err3: 若输入的内容不正确,则退出
if [ $(echo "$num" | grep -v '^[0-9][0-9]*\.\?[0-9]*$') ];then
echo "Error 3:输入的数据不正确" | grep --color=auto 'Error 3:'
exit 3
fi
# succeed
# 数值计算相关笔记:(此处以命令行为例子,脚本该怎么写,自己想去吧)
# 1. expr 3 + 2 #注意:A.整数计算 B.相关参数和运算符号需要空格隔开
#expr $var1 + var2
# 2.$[$var1 + $var2] #注意:整数计算
# 3.echo $(($var1 + $var2)) #注意:整数计算
# 4.bc计算器#注意:除了位运算不支持以外,其他运算基本都支持(四则,幂,浮点等)
# 举例:
calc="$num / 5"
# reslut=$(expr $calc)# 1.在脚本中测试,一直不成功;不懂为什么,因此暂时抛弃该方法
#-------------------------------
# result=$(($calc))# 2.整数计算
#-------------------------------
# result=$[$calc]# 3.同2
#-------------------------------
result=$(echo "scale=2; $calc" | bc) # 4.bc哈哈,很赞,好用!
#-------------------------------
#result=$(bc << eof
#scale=2
#$calc
#eof
#)#5.同4,并且在除法中,可以用scale设置精度
echo "The \"$calc\"'s result is : $result" | grep -E --color=auto "($result|$calc)"
# ---------- END -----------
exit 0
#! /bin/bash
# Program:
#主要在上一个脚本基础上添加了一些重定向的学习内容
# History:
# 2017/12/30 Orig Fisrt Release
# ---------------------------------------
# 捕获脚本退出 信号
trap "echo The script $0 quit" EXIT
# ------------------------------------------
# 重定向相关学习
# echo "Error 1:..." 1>&2 #将stdout的内容重点向到stderr
# echo "Error 2:..." 1> err.log#将stdout的内容重定向到文件err.log
#
# 此处介绍一种,脚本中全部重定向的方式
# exec 1> err.log#将本行以下的所有stdout都重定向到err.log
#exec 3>&1#若后续想要恢复,则临时重定向输出,到则临时重定向
#exec 1>err.log
# ----------------------------------------
# 注意:脚本中的alias别名命令是无效的
# 需要添加如下的命令,使其在脚本中也同样有效
shopt -s expand_aliases
alias grep='grep --color=always' #color修改为always,是为了让重定向之后的内容也有颜色
# 若想要直接使用~/.bashrc中的alias配置
# 也可以通过直接通过source该脚本来测试,不过我试过,出现过一些很奇怪的现象。
# 暂不理会,先学会shopt -s expand_aliases这种方式。我觉得很方便而且修改了什么一看脚本就明白了
# ----------------------------------------
# read 学习
# -t等待超时时间
#-s隐藏输入
#-p显示输入的提示
read -t 3 -p "Please Write the Number: " num
# err1: 若超时,则退出 ; 该命令必须紧接着read命令,因为用到了$?
if [ $? != 0 ];then
echo "Error 1:输入超时!" | grep 'Error 1:'
exit 1
fi
# err2: 若输入为空,则退出
if [ -z "$num" ];then
echo "Error 2:没有输入数据" | grep 'Error 2:'
exit 2
fi
# err3: 若输入的内容不正确,则退出
if [ $(echo "$num" | grep -v '^[0-9][0-9]*\.\?[0-9]*$') ];then
echo "Error 3:输入的数据不正确" | grep 'Error 3:'
exit 3
fi
# succeed
# 数值计算相关笔记:(此处以命令行为例子,脚本该怎么写,自己想去吧)
# 1. expr 3 + 2 #注意:A.整数计算 B.相关参数和运算符号需要空格隔开
#expr $var1 + var2
# 2.$[$var1 + $var2] #注意:整数计算
# 3.echo $(($var1 + $var2)) #注意:整数计算
# 4.bc计算器#注意:除了位运算不支持以外,其他运算基本都支持(四则,幂,浮点等)
# 举例:
calc="$num / 5"
# reslut=$(expr $calc)# 1.在脚本中测试,一直不成功;不懂为什么,因此暂时抛弃该方法
#-------------------------------
# result=$(($calc))# 2.整数计算
#-------------------------------
# result=$[$calc]# 3.同2
#-------------------------------
result=$(echo "scale=2; $calc" | bc) # 4.bc哈哈,很赞,好用!
#-------------------------------
#result=$(bc << eof
#scale=2
#$calc
#eof
#)#5.同4,并且在除法中,可以用scale设置精度
# -----------------------------------------------
# 将上面临时保存的
# exec 1>&3
alias grep='grep -E --color=auto '
echo "The \"$calc\"'s result is : $result" | grep "($result|$calc)"
# ---------- END -----------
exit 0
#! /bin/bash
# Program:
#本函数学习修改字段分隔符
#用来将文件中的标准的带有分隔的内容处理一下
# History:
# 2017/12/31 Orig Fisrt Release
# ---------------------------------------
# 捕获脚本退出 信号
trap 'echo the script $0 Quit! | grep --color=auto "$0" ' EXIT
# 1.修改字段分隔符
# IFS
# --------------------
# 这里面是a.txt的内容
# aston,2017 .12.20
# root,2017 .12.25
# alex,2017 .12.15
# arond,2017 .12.15
#
# 我期待
# This is aston
# This is 2017.12.20
# This is root
# ...
# -------------------
IFS_OLD=$IFS
# IFS=$,'\n'# 失败01,现象像是把逗号和n当成了分隔符
# IFS=$,"\n"# 失败02,现象同上
# IFS=,$"\n"# 失败03,现象同上
# IFS=$"\n",# 失败04,现象同上
# IFS=,$'\n'# 成功
IFS=$'\n', # 成功
# IFS=$' \n',# 把空格也分隔了
# 通过以上测试:
# 将给IFS赋值回车,必须使用$'\n'的形式 ------ 注意!!!
# 2.需要使用新的IFS的命令
file=a.txt
# 测试分隔符的作用
for msg in $(cat $file)
do
printf "This is $msg!\n" | grep --color=auto "$msg"
done
# 3.恢复IFS
# IFS=IFS_OLD
# 4.其他命令...
# 列举并判断当前目录下的文件类型
for file in ./*
do
if [ -d "$file" ];then
echo "The name is $file is directory" | grep --color=auto "$file"
elif [ -f "$file" ];then
echo "The name is $file is regular file" | grep --color=auto "$file"
else
echo "Judge file Error!" | grep --color=auto '.*'
fi
done
# ---------- END -----------
exit 0
#/bin/bash
#
# 笔记:
# grep 上色用法,(注:虽然没什么用,但是看着好看,哈哈)
# 例如你要查看两个文件对比之后的效果
diff sh7.sh sh8.sh | grep -n --color=always "^[+-<>]*" | less -r
# "^[+-<>]*"
# 注意正则表达式中*的好处,这样可以显示所有内容
# 但是带有+-<>开头的将被上色
# 若直接使用"^[+-<>]"则把符合该正则表达式的内容筛选出来了,并不会显示全部内容
# 这样就达不到你上色的目的了,哈哈哈哈哈
# less直接使用不能带有颜色,more可以
# less 需要加上 -r
# -----------------------------------
# vim 学习记录
# -----------------------------------
# 多窗口记录
#
# 0.:new 新建一个窗口
# 1.:sp file2 在现有的窗口基础上分割出一个新的窗口,用来显示新文件
#若直接使用:sp 则也分出一个窗口,但仍然显示当前已经打开的文件的内容
# 2.Ctrl+w,r/R 调整当前窗口的位置,焦点不变(R是逆向的) ----(焦点:指光标所在文件)
# 3.Ctrl+w,x 和上一个焦点的窗口互换位置(注意和Ctrl+w,r的区别)
# 4.Ctrl+w,w 切换焦点位置(在所有窗口中循环)
# 5.Ctrl+w,j/k 切换焦点到下/上窗口---当然后面接上下箭头也可以
# 6.Ctrl+w,h/l 切换焦点到左/右窗口---...
# 7.Ctrl+w,H/J/K/L 水平/垂直分割的切换,同时确定当前窗口所在的位置
# 在当前文件中追加另一个文件的内容
# :r file2
#! /bin/bash
# Note:
# 记录tar打包,和gzip等压缩/解压缩命令
# ------------------------------------------
# 常用的2个(解)压缩命令
# ------------------------------------------
# gzip #压缩后缀.gz
# -d #解压缩
# -v #显示压缩比等信息
# bzip2 #压缩后缀.bz2
# -d #解压缩
# -z #压缩
# -k #压缩的同时会保留原文件
# -v #显示压缩比
# ------------------------------------------
# linux 上经典的打包命令tar
# ------------------------------------------
# tar
# -c #新建打包文件
# -v #在(解)压缩过程中,将正在处理的文件名称显示出来
#
# -t #查看打包文件中有哪些文件名
#
# -j #通过bzip2(解)压缩,建议后缀:*.tar.bz2
# -z #通过gzip(解)压缩,建议后缀:*.tar.gz
#
# -f filename #filename是被处理的文件名称
# -C directory #(应用在解压缩时)设置目标路径
# -x #解打包或解压缩功能
#注:-c,-t,-x不可同时出现在同一个tar命令中
#
# -p #保留备份数据原本的权限和属性(常用于备份-c 重要的配置文件)
# -P #保留绝对路径(允许备份路径含有根目录存在)
# 常用命令:
# 1.压缩:
#tar -jcv -f newfile.tar.bz2 file/directory
# 2.解压缩
#tar -jxv -f file.tar.bz2 (-C directory)
# 3.查询
#tar -jtv -f file.tar.bz2