Shell编程

作者: saoraozhe3hao | 来源:发表于2018-08-02 22:18 被阅读21次
#! /bin/bash  # 声明使用哪种shell,这里是bash
log='haha'   # 定义变量,shell的变量是弱类型的字符串
echo $log    # 使用变量
echo $2      # 执行该程序时传入的第二个参数
echo $#      # 执行该程序时传入参数的个数
echo $?       # 上一条命令的返回状态,0 表示执行正确
echo $$       # 当前进程ID
for attr in $@       # $@为执行该程序时传入的参数列表
do
    ###########      单个值       ###########
    echo `date`  # 只有一个命令
    echo $(date)  # 只有一个命令,一般用这个
    echo date    # 只有一个单词
    echo $attr     # 只有一个变量
    echo $[2#11+2]  # 只有一个表达式求值,2#11表示2进制数11,即3

   ###########      多个值       ###########
    # 不使用引号整体括起来
    echo $attr `date` $(date) "date" date $[1+2]
    # 双引号括起来,单引号称为普通字符
    echo "$attr `date` $(date) 'date' date $[1+2]"
    # 单引号括起来,所有字符都成为普通字符
    echo '$attr `date` $(date) "date" date $[1+2]'
    
    ###########      最佳用法       ###########
    echo 'date'          # 只有一个单词,用单括号,更好区分
    echo 'date $attr'  # 多个单词,用单括号,形成整体
    echo "date $attr"  # 多个值,用双括号,形成整体
done
read passwd      # 等待输入
if [ $passwd = '123']  # 相当于if test $passwd = 123,表达式为真,则test返回状态$?为0
then
    echo 'correct'
else
    echo 'wrong'
fi
while [ !$passwd -eq '123' ]   # 循环
do
    $passwd=$passwd+1
done
trap 'echo 11' INT # 接到INT信号时 执行echo 11
function printit(){    # 函数定义
    echo ${1}     # 调用函数时,传入的第一个参数
}
printit 1              # 函数调用,并传入参数
export x=1        # 把局部变量 导出为 环境变量
case $cho in
"yes")
    echo "yes"
    ;;
"*")
     echo "*"
      ;;
esac
exit 1  # 退出,并返回一个状态

变量

查看所有变量:set
查看环境变量:env,printenv
查看语系:locale
注销变量:unset log
常用环境变量:USER,HOSTNAME,LANG,SHELL,PATH,PS1(命令提示符格式,即光标前面的串)
追加PATH:PATH="$PATH":/目录

信号处理

1、发出信号
四个等价命令:kill -s SIGTERM pid、kill -n 15 pid、kill -15 pid、kill -TREM pid
2、信号捕获
trap "echo 11;exit 2" INT # 处理并退出,INT 也可以替换为它的编号 2
trap "" INT # 忽略
trap INT # 恢复默认处理
3、信号类型
查看信号列表:kill -l
HUP(1)    挂起,终端掉线或退出,前台进程将收到信号,默认终止进程
INT(2)    中断,Ctrl+C,前台进程将收到信号,默认终止进程
QUIT(3)   退出,Ctrl+\,前台进程将收到信号,默认CoreDump
KILL(9)   杀死,不能被捕获
STOP(19)   停止,不能被捕获
STP(20)   暂停,CTRL+Z,前台进程将收到信号,默认暂停进程
4、默认行为
CoreDump(核心转储):当程序运行过程中异常退出时,内核把当前程序在内存状况存储在一个core文件中,以便调试
暂停进程:查看暂停的进程 jobs,恢复暂停的进程 bg job号

子shell

进入子shell:bash,父shell的局部变量失效,环境变量仍然有效
退出当前shell:exit,即回到父shell
查看进程树,shell层次:pstree

条件判断

存在判断 [-e /root],文件存在判断[-f /etc/file],目录存在判断[-d /root]
存在权限判断 [-r /etc] [-w /etc] [-x /etc]
数值判断:等于-eq 或 =,不等于-ne 或 !=,大于-gt,大于等于-ge,小于-lt,小于等于-le
字符串判断:为空[-z str],非空[-nstr],相同[str1 ==str2]
多重判断:与-a,或-o,非!
条件执行&&:命令1&&命令2,命令1执行正确,则执行命令2
条件执行||:命令1 || 命令2,命令1执行不正确,则执行命令2

循环

for循环:for i in 1 2 3 4 5,for in {cat ls.log},for((i=1;i<=num;i=i+1))

重定向

无底洞:/dev/null
重定向标准输出:命令 >/dev/null 或 命令 1>/dev/null,1是标准输出的文件描述符
重定向(追加)标准输出:命令 >>/dev/null 或 命令 1>>/dev/null
重定向标准错误:命令 2>/dev/null,命令 2>>/dev/null,2是标准错误的文件描述符
12重定向连写:命令 &>/dev/null 或 命令 >/dev/null 2>&1
12重定向(追加)连写:命令 &>>/dev/null 或 命令 >>/dev/null 2>&1
2>&1:表示2的重定向目标和方式(覆盖还是追加)与1相同,也可以写成2&>1

相关文章

  • shell 案例

    Shell编程一 Shell防范ARP攻击 Shell编程二 Shell防范DDos攻击 Shell编程三 ...

  • shell 第一天

    shell编程初识 1.1 shell编程初识 shell的定义 Shell 是命令解释器 Shell 也是...

  • 78.shell编程

    shell编程 Shell脚本,是一种为shell编写的脚本程序。 Shell编程跟JavaScript、Pyth...

  • 2019-01-25

    Linux系统Shell编程指南 前言 适合人群:有类似C编程基础的人 一、Shell编程介绍 Shell解释型语...

  • day 28

    shell编程基础 shell编程一小时光速入门web集群架构会用到shell编程基础 1、为什么要学shell编...

  • Shell 编程的 Hello World

    什么是 Shell?简单来说,Shell 编程是对 Linux 命令的逻辑化处理。 来看看 Shell 编程是如何...

  • Shell 编程的 Hello World

    什么是 Shell?简单来说,Shell 编程是对 Linux 命令的逻辑化处理。 来看看 Shell 编程是如何...

  • 后端运维人员必备shell编程入门

    本文转载自 公众号 Snailclimb Shell 编程入门 走进 Shell 编程的大门 为什么要学Shell...

  • shell编程

    Shell脚本,是一种为shell编写的脚本程序。 Shell编程跟JavaScript、Python编程一样,只...

  • day28-2019年4月9日

    shell编程基础 1、为什么要学shell编程? linux系统中会大量得使用shell,工作中也需要...

网友评论

    本文标题:Shell编程

    本文链接:https://www.haomeiwen.com/subject/dkkevftx.html