一、Shell脚本的执行通常可以采用以下几种方式:

1):bash script-name或sh script-name(推荐使用)
2):path/script-name 或./script-name(当前路径下执行脚本)
3):source script-name或 . script-name #→注意”.”点号。
4):sh<script-name或cat scripts-name|sh(同样适合bash)

二、普通变量:

1:环境变量:变量必须是大写

1):配置永久性的环境变量,全局变量的配置文件:/etc/profile 、/etc/bashrc 基本上使用 /etc/profile
2):配置用户的环境变量的配置文件,分别是:用户的主目录下的隐藏文件:~/.bash_profile 、 ~/.bash_bashrc
3):临时设置 # export ZSY=1
4):设置所有用户生效的目录 :/etc/profile.d/ :目录下必须是脚本否则无法使用
5):如果写一个JAVA的脚本,要把JAVA环境变量放入脚本内,特别是定时任务执行的时候
6):显示环境变量:
(1):# env //* 显示的环境变量
(2):# set //* 显示的环境变量跟多
7):取消环境变量
(1):# unset <环境变量名> //* 临时取消变量
(2):进入文件删除变量

2:环境变量的意义:

1):UID :当前用户的UID
2):USER :当前登录的用户
3):HOME :当前的用户主目录
4): _= :上一条命令的最后一个参数
5):BASH :调用实例时使用的全路径
6):PS1 :当前的终端
7):PATH :命令所在路径

3:局部变量:

1):一般连续的字符串,数字,路径等可以不加任何引号,不过无引号的情况最好用双引号替代之。
2):如果变量中使用其他变量时,则不可以使用单引号否则无法使用:如下:
[root@centos6 ~]# a='$USER'
[root@centos6 ~]# echo $a
$USER 3):如果变量中有空格的话,就必须使用双引号否则无法输出:如下:
[root@centos6 ~]# a=1 2 3
-bash: 2: command not found
[root@centos6 ~]# a="1 2 3"
[root@centos6 ~]# echo $a
1 2 3

4:引号的意义

1):无引号:把内容输出出来,会将未含有空格的字符串视为一个整体输出; 如果有命令(要在反引号中的)、变量、特殊转义符解析出结果然后子在输出最终内容来,如果字符串中有空格等特殊字符则则不能完整输出,需要加双引号,一般连续的字符串,数字,路径等可以不加任何引号, 不过无引号的情况最好用双引号替代之。
2):单引号:可以说是所见即所得:即将单引号内的所有内容都原样输出,或者描述为里面看到的是什么就会输出什么
3):双引号:把双引号内的所有内容都输出出来;如果有命令(要在反引号中的)、变量、特殊转义符解析出结果然后子在输出最终内容来。
4):反引号:一般用于执行命令,执行的时候命令会执行,同理可以使用 a=$(ls):结果相同

5:变量定义小结:

5.1. 普通变量:

a=1     # 连续的数字字符串
a="/etc/rc.local $USER" # 解析结果后输出
a='$USER' # 原样输出

5.2. 命令内容定义:

a=`ls`   #反引号, 将反引号中字符当做命令输出
a=$(ls)

5.3. 特殊变量:位置变量

1):$n :获取当前执行的shell脚本的第n个参数值(参数值默认以空格区分,如果参数加了双引号,则将双引号的整个作为一个参数, 不管其中是否有空格,如 例3 ),n=1..9 ,当 n 为0时表示脚本的文件名,如果n大于9,用大括号括起来${10},参数以空格隔开。如下:

例1:
[root@centos6 ~]# echo $1 a
a
[root@centos6 ~]# echo $1 $2 a b
a b 例2:
[root@centos6 ~]# cat p.sh
echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} ${14} ${15}
[root@centos6 ~]# sh p.sh {a..z}
a b c d e f g h i j k l m n o 例3:
[root@centos6 ~]# cat p.sh
echo $2
[root@centos6 ~]# sh p.sh "1 2" "3 4"
3 4 # 注意当整数超过9 时,数字要使用 “{}” 扩起来否则会出现 以下结果
[root@centos6 ~]# cat p.sh
echo $1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15
[root@centos6 ~]# sh p.sh {a..z}
a b c d e f g h i a0 a1 a2 a3 a4 a5

2):$0 获取当前脚本本身的名字

$1    # 获取当前传递给该shell脚本的第一个参数
$2 # 获取当前传递给该shell脚本的第二个参数
$# # 获取当前传给脚本的参数个数
$$ # 获取当前脚本运行的当前进程 PID 号
$@ # 获取当前传给脚本的所有参数的列表
$* # 获取当前以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个
$? # 是显示最后命令的退出状态,0表示没有错误,其他表示有错误

3):$1 是传递给该shell脚本的第一个参数,一般系统启动文件最后都有这个,作为接收输入的命令如

# /etc/init.d/sshd start   # 是将 start 赋值给 $1,然后脚本根据这个参数执行这个参数下的命令:如下脚本:
[root@centos6 ~]# cat p.sh
case "$1" in
  start)
    echo "123" && exit 0
    ;;
  stop)
    echo "234" && exit 0
    ;;
esac
exit
[root@centos6 ~]# /etp.sh start
123
[root@centos6 ~]# sh p.sh stop
234

4):$0 是用来取脚本本身的名字,就是你命令之后跟的内个名字,如下图的 sh a.sh 中的 a.sh

    [root@centos6 ~]# cat a.sh
echo $0
[root@centos6 ~]# sh a.sh
a.sh 例1:在启动脚本中也有 $0 ,当启动脚本的时候输入的不正确时就会出现
[root@centos6 ~]# tail -4 /etc/init.d/sshd |head -1
echo $"Usage: $0 {start|stop|restart|reload|force-reload|condrestart|try-restart|status}"
[root@centos6 ~]# /etc/init.d/sshd *
用法: /etc/init.d/sshd {start|stop|restart|reload|force-reload|condrestart|try-restart|status} 例2:将文件与名字分离
[root@centos6 etc]# cat ~/a.sh
dirname $0
basename $0
[root@centos6 etc]# sh ~/a.sh
/root
a.sh # dirname $0 取得是路径
# bashname $0 取得是名字

5):$# :获取当前传给脚本的所有参数的个数,一般用于控制参数个数,如例1.

    [root@centos6 ~]# cat a.sh
echo $#
[root@centos6 ~]# sh a.sh 1 2 3 4 5 6
6 例1:判断参数少于两个,就告诉报 脚本名加 "ARG1 ARG2" ,等于或大于两个参数时,显示钱两个参数
[root@centos6 ~]# cat a.sh
#!/bin/bash
[ $# -ne 2 ] && {
echo "$0 ARG1 ARG2"
exit 1
}
echo $1 $2
[root@centos6 ~]# sh a.sh
a.sh ARG1 ARG2
[root@centos6 ~]# sh a.sh 1 2
1 2 # 脚本中的 exit 1 指的是返回值:如下例2 例2:
[root@centos6 ~]# cat p.sh
echo "123456789"
exit 28
[root@centos6 ~]# sh p.sh
123456789
[root@centos6 ~]# sh p.sh ;echo $?
123456789
28

6):$? 命令执行的返回值,0表示没有错误,其他表示有错误

[root@centos6 ~]# ls ; echo $?
a.sh iptables.sh p.sh
0
[root@centos6 ~]# 123 ; echo $?
-bash: 123: command not found
127 # 分号就是间隔符,表示前面和后面是两个命令的意思,执行完前一个,再执行后一个,两个命令没有任何依赖关系

5.4. 返回值代表意义:

0 :成功
1 或 2 :权限拒接,表示权限不足
1~125 :表示运行失败,脚本命令、系统命令错误或参数传递错误;
126 :找到命令了,但是无法执行
127 :命令找不到,
大于128的 :命令执行中退出

shell编程1:变量的使用与例子的更多相关文章

  1. Linux学习——shell编程之变量

    shell编程之变量:Linux shell编程基础中的变量. 包括Bash变量的分类和各变量的详细使用,如:用户自定义变量.环境变量.语系变量.位置参数变量和预定义变量. 1:什么是Bash变量? ...

  2. Linux编程 21 shell编程(环境变量,用户变量,命令替换)

    一.概述 这篇介绍shell的变量使用,跟其实语言一样,都有声明变量,使用变量,在shell中变量允许你临时地将信息存储中shell脚本中,以便和脚本的其他命令一起使用. 1.1 环境变量 在前面章节 ...

  3. Linux —— Shell编程之变量赋值和引用

    Linux的shell编程是一种非常成熟的编程语言,它支持各种类型的变量.有三种主要的变量类型:环境变量.内部变量和用户变量. 环境变量(environment variable)是系统环境的一部分, ...

  4. Shell 编程 (变量和条件测试)

    变量: 1 . 变量声明 直接使用变量 + 赋值 #!/bin/bash NAME='HELLO WORD' echo $NAME 使用 declare 关键字声明 declare(选项)(参数) + ...

  5. Shell编程-02-Shell变量

    目录 什么是Shell变量 变量类型 环境变量初始化及其对应文件的生效顺序 什么是Shell变量     在初等数学数学方程式中,我们会经常碰到类似于这样的方程式:y=x+1 ,等号左右两边的x和y称 ...

  6. Linux Shell编程、变量、控制语句

    为什么要学习Shell编程 1)Linux运维工程师在进行服务器集群管理时,需要编写Shell程序来进行服务器管理. 2)对于JavaEE和Python程序员来说,工作的需要,你的老大会要求你编写一些 ...

  7. linux shell编程之变量和bash配置文件(第一篇)

    编程语言有两类 强类型:如C语言.数据具有其特定的类型,先声明定义后才能使用.数据运算时必须符合类型要求(如不能把字符串类型数据直接与整型数据做算数运算) 弱类型:如shell.数据默认为字符型,不用 ...

  8. SHELL编程概念&变量剖析

    一.shell软件概念和应用场景 1) 学习Linux技术,不是为了学习系统安装.命令操作.用户权限.配置IP.网络管理,学习Linux技术重点:基于Linux系统部署和维护各种应用软件.程序(Apa ...

  9. 一、shell编程与变量

    目录 命令是什么 命令是如何运行的: 基本语法 解释器 注释 如何执行 输入.输出流 重定向 管道符 | 变量 常见Shell变量的类型包括: 变量命名原则 单引号和双引号 反引号 变量作用范围 查看 ...

  10. Shell编程之变量进阶

    一.变量知识进阶 1.特殊的位置参数变量 实例1:测试$n(n为1...15) [root@codis-178 ~]# cat p.sh echo $1 [root@codis-178 ~]# sh ...

随机推荐

  1. [ZJOI2019]浙江省选(半平面交)

    一眼看上去就应该能用半平面交去做. 首先考虑怎么求可能得第1名的人:每个人的函数为直线,就是在所有人的半平面交中的上边界者即可获得第一名,这个可以单调队列求解. 再考虑如何求可能得第2名的人:满足2个 ...

  2. Angular开发者指南(三)数据绑定

    数据绑定 AngularJS应用程序中的数据绑定是模型和视图组件之间的数据的自动同步. AngularJS实现数据绑定的方式可以将模型视为应用程序中的单一来源. 视图是模型在任何时候的投影. 当模型更 ...

  3. aws基础架构学习笔记

    文章大纲 Aws 的优势 架构完善的框架(WAF) Aws 学习笔记 Aws架构中心 Aws 的优势 4.速度优势 5.全球优势 数分钟内实现全球部署 Aws全球基础设施 Aws 数据中心 来自多家O ...

  4. 常用JS图片滚动(无缝、平滑、上下左右滚动)

    常用JS图片滚动(无缝.平滑.上下左右滚动)代码大全 <head><-----></head><body> <!--向下滚动代码开始-->& ...

  5. Ubuntu 12.04 查看DOCSIS配置文件

    查看BIN格式的DOCSIS配置文件,需要专用工具. 工具安装 在Windows下,可以使用工具VultureWare DOCSIS Config Editor. 在Ubuntu(本机版本12.04) ...

  6. js正则表达式常用的大部分函数

    1.)String方法a.)String.search()参数:可以是正则表达式也可以是普通的字符串.返回值:如果找到匹配则返回首字符的索引位置,找不到则返回-1var s = "Hello ...

  7. Bc-数组-Stack

    1.栈,堆栈,先进后出 2.栈的几个操作: > 入栈,push > 出栈,pop > 获取栈顶元素,peek > 获取栈中共有元素个数,getSize > 是否为空,is ...

  8. Codeforces Round #200 (Div. 1)D. Water Tree

    简单的树链剖分+线段树 #include<bits\stdc++.h> using namespace std; #define pb push_back #define lson roo ...

  9. django框架基础-ORM进阶-长期维护

    ###############    ORM进阶---contenttype    ################ 设计思路: """ 路飞有两种课,专题课和学位课, ...

  10. 自定义servlet重写doGet或doPost方法是如何实现多态的

    我们知道,如果我们自定义一个servlet继承HttpServlet,并且重写HttpServlet中的doGet或doPost方法,那么从浏览器发送过来的request请求将调用HttpServle ...