首页 > 系统服务 > 详细

shell学习笔记(1)

时间:2019-09-12 00:32:46      阅读:80      评论:0      收藏:0      [点我收藏+]

技术分享图片

为了实现自动化运维,对服务器实现自动化控制,我们需要学习shell脚本编程。

内核是操作系统的核心,它负责管理内存、调度任务和驱动硬件等基本功能。内核的外面一层叫做shell(外壳),shell可以保护内核免受伤害。shell的外面就是各种各样的应用程序。应用程序在执行的时候通过shell翻译成内核可以理解的某一种语言。可见shell是非常重要的 。

每一种操作系统都有自己的shell,如DOS:command.com;windows:explorer.exe。Linux有多种shell。

[root@node1 ~]# chsh -l (或# cat /etc/shells)
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash

 /bin/sh(一个叫波恩的人开发的)最早出现的shell, /bin/csh用于BSD, /bin/bash,/bin/tcsh, /bin/ksh。centos中标准的shell是/bin/bash

查看系统当前使用的shell:

[root@node1 ~]# echo $SHELL
/bin/bash

 shell之间的切换:

  • 临时切换:直接执行 /bin/sh
  • 永久切换:直接修改/etc/passwd文件或使用chsh命令

1. /bin/bash的特点

  1. 交互式
  2. 命令历史功能:所有输入的命令会记录在用户家目录的.bash_history文件中(隐藏文件,ls -a查看

# history

# !21 (执行第21条命令

记录历史命令的条数由两个环境变量决定:HISTFILESIZE=1000,HISTSIZE=1000(当前的shell最多记录1000行)

# set 或 env(显示系统环境变量

  3. Tab键命令补齐功能(1次tab和2次tab

  4. 前台和后台功能

    # cp -a /usr/share/*  /root/tmp/abc/ (在前台执行一个耗时的任务,此时再输入别的命令没有反应

    ctrl + z 暂停运行

    # jobs (查看正在运行或暂停的任务

    # fg 编号(把暂停的任务调入前台运行

    # bg 编号(调入后台运行

    # cp -a /usr/share/*  /root/tmp/abc/  &  (后台运行

  5. 输入输出重定向

    # mail user10 (若mail客户端没安装,yum -y install mailx,其配置文件/etc/mail.rc

    Subject: ok
    hello,i am admin.
    . (输入点号结束)

    邮件内容是通过标准输入设备键盘输入的。其实邮件内容也可以保存在一个文件中,然后使用输入重定向符(<)从文件中提取输入内容,加上计划任务就可以自动发邮件了。

    # mail -s ok user10 < f1 (邮件内容来自文件f1

    查看邮件是否发送出去:# tail -f /var/log/maillog

    输出重定向可以使用 >(覆盖)或 >>(追加


     标准输入

    标准输出(指的是正确信息

    标准错误(指的是错误信息

    # su - user10

    $ find / -size +10M(出现了很多 find: `/var/lib/postfix‘: Permission denied的错误信息)

[root@node1 ~]# ll /dev/std*
lrwxrwxrwx. 1 root root 15 Sep 7 07:11 /dev/stderr -> /proc/self/fd/2
lrwxrwxrwx. 1 root root 15 Sep 7 07:11 /dev/stdin -> /proc/self/fd/0
lrwxrwxrwx. 1 root root 15 Sep 7 07:11 /dev/stdout -> /proc/self/fd/1 

    0 表示stdin标准输入,1 表示stdout标准输出,2 表示stderr标准错误

    $ find / -size +10M 1>/dev/null(1代表标准输出,/dev/null 表示空设备文件,即把正确信息重定向到/dev/null,屏幕上显示的全是错误信息

    $ find / -size +10M 2>/dev/null(2代表标准错误,屏幕上显示的全是正确信息

    $ find / -size +10M &>/dev/null(&表示1和2,正常和错误信息都不显示)

    $ find / -size +10M >/dev/null 2>&1(2>&1 的意思是将标准错误重定向到标准输出,这里标准输出已经重定向到了/dev/null,那么标准错误也会输出到/dev/null。为什么是&1而不是1?&符号可以理解为引用(reference),&1就是对标准输出的引用,只打开一次文件。

  例子:搜索系统中有没有user10这个账号

    # grep ‘^user10\>‘ /etc/passwd &>/dev/null && echo "ok" || echo "not"

  6. 通配符

    ? 任意1个字符

    * 任意字符或字符串

    [ ] 任意一个栏位

    # ll f[a-z]

    # ll f[0-9]

    # ll f[!0-9]

  7. 变量

    分为本地变量,环境变量,位置变量,状态变量

  7.1 本地变量:只能在当前shell中使用的变量

    # ABC=10

    # set | less(可以查看到这个变量

    # echo $ABC(显示变量的值

    # /bin/bash(进入到另一个shell

    # echo $ABC(没有值,本地变量只能在当前shell使用

  7.2 环境变量

    # export ABC(将该变量变为环境变量,unset ABC为相反操作

    # /bin/bash

    # echo $ABC(有值

    # env(显示所有的环境变量) 

    # set(显示所有的变量,环境变量+本地变量

    系统环境变量的解读,例如颜色的设置等(省略...

    环境变量是靠环境文件产生的(①首先执行,④最后执行

    系统环境文件:① /etc/profile,      ④ /etc/bashrc

    个人:              ② ~/.bash_profile,③ ~/.bashrc

    解读/etc/profile文件:(-z表示为null,变量未定义;-x表示可执行;-f表示是否存在某个文件;-a表示and)    

 1 if [ -x /usr/bin/id ]; then
 2     if [ -z "$EUID" ]; then
 3         # ksh workaround
 4         EUID=`/usr/bin/id -u`
 5         UID=`/usr/bin/id -ru`
 6     fi
 7     USER="`/usr/bin/id -un`"
 8     LOGNAME=$USER
 9     MAIL="/var/spool/mail/$USER"
10 fi

   7.3 状态变量:上一次指令执行的结果,0为真(正确),非0为假(错误)。

    # echo $?(?为状态变量)

  7.4 位置变量

    $1(第一个变量)  $2(第二个变量)  $0(表示脚本的基名basename)    

#!/bin/bash
let SUM=$[$1 + $2]
echo $1 $2 $SUM $0

 

  8. 引号

    双引号 " "  — 变量的弱引用(得到变量的值)

    单引号 ‘ ‘  — 变量的强引用(用得较少)

    反引号 ` `  — 命令的取代

 

shell学习笔记(1)

原文:https://www.cnblogs.com/ybliu/p/11506281.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!