shell知识大杂烩

  • 1. 获取执行文件的绝对路径
workdir = $(cd $(dirname $0);pwd)
  • 2. set -e -o pipefail errexit(同-e) 脚本出错即停
set -x 会在执行每一行 shell 脚本时,把执行的内容输出来。它可以让你看到当前执行的情况,里面涉及的变量也会被替换成实际的值。
  • 3. 特殊变量
$!(shell最后运行的后台进程的PID)
$$(shell本身pid)
$?(获取前一个命令执行状态)
$*(获取参数列表,返回("$1 $2 $3")) 
$@(获取参数列表,返回("$1" "$2" "$3"))    
$#(获取传参的个数)
  • 4. 换着花样玩儿变量
例:path=/a/b/c/d/a/c/b
(1) echo ${path#/*c} 匹配$path 以第一个c为分割符的右边    >>/d/a/c/b
(2) echo ${path##*c} 匹配$path 以最后一个c为分割符的右边 >>/b
(3) echo ${path%c*}  匹配$path 以最后一个c为分隔符的左边部分 >>/a/b/c/d/a/
(4) echo ${path%%c*} 匹配$path 以第一个c为分隔符的左边部分 >>/a/b/
(5) echo ${path/c/w} 将匹配到的第一个字符'c'替换成'w'
(6) echo ${path//c/w} 将匹配到的所有字符'c'替换成'w'

(1) ${value:-word} 若变量value未定义或为空,则用word替换; world一般为常用、默认参数 常用判断传入参数是否为空、rm -rf /${path}等时候
(2) ${value:=word} 若变量value未定义或为空,则返回word 且将word赋值给value word一般为常用值  
(3) ${value:?word} 例echo ${c:?变量未定义或者未赋值}  c为空或未赋值,输出提示语,并终止程序  常用
(4) ${value:+word} 若value已赋值,则value=word
(5) ${#value} 统计value中字符的个数  常用
  • 6. 插入多行到文本末尾,若是替换则将cat>>test.sh改为cat>test.sh
cat>>test.sh<< EOF
+--------------------------------------------------------------+
| === Welcome to Tunoff services === |
+--------------------------------------------------------------+
EOF
  • 7. 多姿多彩的文字
echo -e "\033[5;41;37m hello \033[0m" 
echo -e "\033[31m 红色字 \033[0m"
echo -e "\033[34m 黄色字 \033[0m"
echo -e "\033[41;33m 红底黄字 \033[0m"
echo -e "\033[41;37m 红底白字 \033[0m"
字颜色:30—–37
echo -e "\033[30m 黑色字 \033[0m"
echo -e "\033[31m 红色字 \033[0m"
echo -e "\033[32m 绿色字 \033[0m"
echo -e "\033[33m 黄色字 \033[0m"
echo -e "\033[34m 蓝色字 \033[0m"
echo -e "\033[35m 紫色字 \033[0m"
echo -e "\033[36m 天蓝字 \033[0m"
echo -e "\033[37m 白色字 \033[0m"
字背景颜色范围:40—–47
echo -e "\033[40;37m 黑底白字 \033[0m"
echo -e "\033[41;37m 红底白字 \033[0m"
echo -e "\033[42;37m 绿底白字 \033[0m"
echo -e "\033[43;37m 黄底白字 \033[0m"
echo -e "\033[44;37m 蓝底白字 \033[0m"
echo -e "\033[45;37m 紫底白字 \033[0m"
echo -e "\033[46;37m 天蓝底白字 \033[0m"
echo -e "\033[47;30m 白底黑字 \033[0m"
\33[0m 关闭所有属性
\33[1m 设置高亮度
\33[4m 下划线
\33[5m 闪烁
\33[7m 反显
\33[8m 消隐
\33[30m — \33[37m 设置前景色
\33[40m — \33[47m 设置背景色
\33[nA 光标上移n行
\33[nB 光标下移n行
\33[nC 光标右移n行
\33[nD 光标左移n行
\33[y;xH设置光标位置
\33[2J 清屏
\33[K 清除从光标到行尾的内容
\33[s 保存光标位置
\33[u 恢复光标位置
\33[?25l 隐藏光标
\33[?25h 显示光标
  • 8. 文件判断
-e filename 如果 filename存在,则为真
-d filename 如果 filename为目录,则为真
-f filename 如果 filename为常规文件,则为真
-L filename 如果 filename为符号链接,则为真
-r filename 如果 filename可读,则为真
-w filename 如果 filename可写,则为真
-x filename 如果 filename可执行,则为真
-s filename 如果文件长度不为0,则为真
-h filename 如果文件是软链接,则为真
  • 9. 连接数据库
sql_commands="create database IF NOT EXISTS ${DBNAME}"
mysql -h${host_name}  -P${port}  -u${user_name} -p${paaswd} -e "${sql_commands}"
  • 10. 循环获取连续数字
(1) for i in {1..10}
(2) for i in `seq 1 10`
  • 11. 多线程,parallel命令
&:后台运行 
wait:等子线程结束之后进行下面的命令 

for num in `seq 1 ${all_num}`
do
{
    sleep 1
    echo ${num}
} &
done
wait

GNU parallel命令是非常强大的并行计算命令,使用-j参数控制其并发数量,推荐
parallel -j 5 "sleep 1;echo {}" ::: `seq 1 10` 
cat bigfile.txt | parallel  --pipe grep 'pattern' 当需要操作一个特别大的文档时
cat bigfile.txt | parallel --pipe sed s/old/new/g
  • 12. 定时任务
方法一:1. 键入 crontab  -e 编辑crontab服务文件;2. 用 crontab  -l 命令查看是否成功 3. /sbin/service crond start 4. ps -ax | grep cron
方法二:1. 创建xx.crontab文件;2.进入xx文件编辑定时任务(有多个定时任务时);3.crontab xx.crontab。4. 删除crontab -r xx.crontab
               crontab -l  > conf && echo "crontab_command" >> conf && crontab conf
方法三:死循环加sleep;for ((;;)) ,while: or while true: 等
       */2 * 1-15 1,5,9 0 /bin/sh /home/admin/jiaoben/buy/deleteFile.sh
          小时    日       月       星期     命令
      0-59   0-23   1-31   1-12     0-6     command     (取值范围,0表示周日一般一行对应一个任务)
     记住几个特殊符号的含义:
         “*”代表取值范围内的数字,                                                                                                                                                                                                                                                                                          
         “/”代表”每”
         “-”代表从某个数字到某个数字,
         “,”分开几个离散的数字
crontab命令
    cron服务提供crontab命令来设定cron服务的,以下是这个命令的一些参数与说明:
    crontab -u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数 
 crontab -l //列出某个用户cron服务的详细内容
 crontab -r //删除没个用户的cron服务
 crontab -e //编辑某个用户的cron服务 
  • 13.bash中多用[[ ]]代替[],test等,更加通用
字符表达式的比较使用 [[ ]] ,其运算符 =、!=、-n、-z
文件表达式的测试使用 [[ ]] ,其运算符 -r、-l、-w、-x、-f、-d、-s、-nt、-ot
逻辑表达式的测试使用 [[ ]] ,其运算符 !、&&、||
数字比较、字符比较、逻辑测试可以组合,如$ [[ "a" != "b" && 4 -gt 3 ]]
支持bash中的通配符扩展,如:[[ hest = h??t ]] 、[ hest = h*t ]]
  • 14. echo命令
echo -n "hello world"   输出不换行
echo -e "\033[30m 黑色字 \033[0m"   输出转义字符
  • 15. 文件压缩、解压命令
.tar  解压 tar xzvf filename.tar -C dirname 
  压缩 tar czvf filename.tar dirname
.zip   解压 unzip filename.zip -d dirname
        压缩 zip filename.zip dirname
.gz  解压1 gunzip filename.gz
  解压2 gzip -d filename.gz
  压缩 gzip filename
.tar.gz 和 .tgz 解压 tar zxvf filename.tar.gz
  压缩 tar zcvf filename.tar.gz dirname
.bz2 解压1 bzip2 -d filename.bz2
   解压2 bunzip2 filename.bz2
.bz2 压缩 bzip2 -z filename
.tar.bz2 解压 tar jxvf filename.tar.bz2
        压缩 tar jcvf filename.tar.bz2 dirname
.bz 解压1 bzip2 -d filename.bz
   解压2 bunzip2 filename.bz
.tar.bz 解压 tar jxvf filename.tar.bz
.z 解压 uncompress filename.z
    压缩 compress filename
.tar.z 解压 tar zxvf filename.tar.z
         压缩 tar zcvf filename.tar.z dirname
.rar  解压 unrar e filename.rar
     压缩 rar a filename.rar dirname
 
 
####################
##生命不息,未完待续##
####################
 
 
 
posted @ 2019-07-22 15:58  羽惑飞  阅读(114)  评论(0)    收藏  举报