博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基本shell脚本的编辑及变量
阅读量:6605 次
发布时间:2019-06-24

本文共 2040 字,大约阅读时间需要 6 分钟。

 shell脚本与变量

 shell脚本的用途:

  1. 自动化常用命令
  2. 执行系统管理和故障排除
  3. 创建简单的应用程序
  4. 处理文本或文件

 shell脚本编写格式:

  1. 第一行:shebang机制 用#加shell类型开头
  2. 后续可直接跟命令,用命令达到需要的效果即可
  3. 如需内容注释行首加#即可

    例如:

    #/bin/bash

    #test
    cat /etc/passwd
     shell脚本执行方法:

  4. bash /绝对路径
  5. 加入$PATH变量,给脚本文件添加执行权限,然后直接输入脚本文件名即可运行
  6. cat /脚本路径 | bash
     ;检查脚本语法是否错误的方法:
  7. bash -n 加脚本文件名: 检查语法是否错误,如有错则打印至终端
  8. bash -x 夹脚本文件名: 逐步运行脚本,如遇到错误则终止并报错

 shell变量:

变量是指用一个熟悉的,或者意义明显的单词、字节来给变量另起一个名字,达到每次使用变量名就可以是其本身作用发挥的功能
shell变量命名法则:

  1. 不能使用程序中的保留字 (内部命令)
  2. 只能使用数字、字母、下划线,且不能以数字开头
  3. 见名知意
  4. 统一命名规则:驼峰命名法
    命名建议: 1. 变量名大写
    1. 局部变量小写
    2. 函数名小写
    3. 用英文单体、体会实际作用

shell赋值 x=y

例如:

[root@centos6 ~]:NAME=`hostname`      [root@centos6 ~]:echo $NAME    centos6.localdomain

 hostname本身是一个命令,功能是可以打印出主机名,这里给hostname定了一个变量为NAME ,所以打印 $NAME 就可以直接显示出主机名了。

 这里注意因为hostname本身是一个命令,所以定变量的时候需要用``引起来,才能够辨别出命令。
 同样的方法也可以用变量来定义另外一个变量,这个时候就需要用""引起来,是可以辨别变量的,同时引号内需要加变量符号$ ""不加一般也可以,但是变量符$必须加上才能够辨别
 如果定义一个字符,本身字符就是一个变量或者命令,可以用''引起来,不辩别任何变量和命令,和什么都不加效果一样
  以上为普通变量,不可传递给子进程
  另有环境变量以及位置变量、只读变量
  环境变量:可传递给子进程
环境变量赋值的两种简单方法 :

[root@centos7 ~]:export NAME=`hostname`    [root@centos7 ~]:declare -x NAME=`hostname`

用nev命令或export可显示所有环境变量。

 环境变量一般主要用途在于,定义的环境变量可以在编辑文件、写脚本的界面也可以用

 只读变量:故名思意,只能声明及显示,不可修改和删除

只读变量赋值:

readonly NAME=`hostname`或  declare -r NAME=`hostname`

readonly -p 命令可以显示所有定义了的只读变量

 位置变量:位置变量一般在一些shell脚本中使用 ,一般shell有自带只读变量$1,$2,$3··· $*,$#,$0

$1 指脚本后跟的第一个参数、  $2 指脚本后跟的第二个参数,以此类推    $* 指脚本后跟的所有参数    $# 指脚本后跟的参数个数    $0 指脚本本身的绝对路径

例如

[root@centos7 data] cat /data/shell.sh         echo $1   [root@centos7 data] bash /data/shell.sh  centos6  centos6

/data/shell.sh是一个脚本,功能是打印出$1,而$1是一个位置变量,表示脚本后跟的第一个参数centos6 ,所以脚本实现的功能就是打印centso6

 还有一些系统本身的特殊变量:

$$             进程本身PID    $PATHPID       进程本身PID       $PPID          父进程PID    $_             上一个命令的结果

以上普通变量、环境变量、只读变量赋值只本次登陆生效,如需永久生效需写入配置文件:

全局生效: /etc/profile
只对单个账户生效: ~/bash_profile

补充一些括号以及引号的用法:

'' 单括号,最单纯的引号,不辩别命令,也不辩别变量
"" 双括号 稍微聪明一点 可以辨别变量,但不辩别命令
`` 反向单引号 ,最聪明的引号,可以辨别变量,也辨别命令
 引用命令也可以用$( )
( )中括号,可以在中括号内命名变量,然后跟子命令,只对括号内的子命令生效
{ }花括号,在花括号内命令变量,无需子命令,后续也继续生效

  至此

转载于:https://blog.51cto.com/14322599/2405607

你可能感兴趣的文章
Github-Client(ANDROID)开源之旅(二) ------ 浅析ActionBarSherkLock
查看>>
no identities are available for signing
查看>>
javascript 和 jquery插件开发
查看>>
Linux Shell文件差集
查看>>
eclipse中如何去除警告:Class is a raw type. References to generic type Class<T> should be parameterized...
查看>>
Gradle脚本基础全攻略
查看>>
Django模版中的过滤器详细解析 Django filter大全
查看>>
Linux中使用pwconv实现passwd中密码到shadow
查看>>
MongoDB C++ gridfs worked example
查看>>
Visual Studio 2017各版本安装包离线下载
查看>>
C#线程安全的那些事
查看>>
【论文笔记】Social Role-Aware Emotion Contagion in Image Social Networks
查看>>
rpm安装PostgreSQL
查看>>
k sum(lintcode)
查看>>
28. extjs中Ext.BLANK_IMAGE_URL的作用
查看>>
Hibernate注解配置N:N关联
查看>>
Android 控件属性
查看>>
【244】◀▶IEW-Unit09
查看>>
处理有外键约束的数据
查看>>
par函数的xaxt函数-控制x轴刻度的显示
查看>>