开发者学堂课程【Shell 编程入门到精通:Shell 编程基本语法-变量使用方法】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/453/detail/5593
Shell 编程基本语法-变量使用方法
内容简介:
一、Shell 基本语法
二、变量
三、综合实例
一、 Shell 基本语法
(1)简单的 shell 程序
[root@xuegod63 test]# vim example01.sh
#写入以下内容
#!/bin/bash
#This is to show what a example looks like.
echo
“
Our first example
”
echo #This inserts an empty line in output.
echo
“
We are currently in the following directory.
”
pwd
echo
echo
“
This directory contains the following files.
”
ls
[root@xuegod63 test]# chmod +x example01.sh
[root@xuegod63 test]# √example01.sh
Our first example
We are currently in the following directory
/root/test
This directory contains the following files
example01.sh
[root@xuegod63 test]#
(2)注释
#!/bin/bash
#!跟 shell 命令的完全路径。
作用:显示后期命令以哪种 shell 来执行这些命令。
如不指 shell ,以当前 shell 作为执行的 shell 。
[root@xuegod63 test]# ||/bin/sh
lrwxrwxrwx.1 root root 4 Dec 18 2012/bin/sh -> bash
#This is to show what a example looks like.以 shell 中以#开始头表示,整个行就被当作一个注释。
执行时被忽略。
Shell 程序一般以 .sh 结尾
(3)创建 shell 程序的步骤
第一步:创建一个包含命令和控制结构的 shell 文件。
第二步:修改这个文件的权限使它可以执行。
使用chmod u +x
第三步:执行
方法1:√example01.sh
方法2:使用绝对路径
[root@xuegod63 test]# /root/test/example01.sh
方法3:[root@xuegod63 test]# bash example01.sh
二、变量
(1) shell 变量
变量是 shell 传递数据的一种方法。变量是用来代表每个值的符号名。像 1+x=3 中,用 x 代表一个未知项,有时也可当成一个变量。
例: x=3
Shell 有两类变量:
①临时变量:是 shell 程序内部定义的,其使用范围仅限于定义它的程序,对其他程序不可见。
②永久变量:是环境变量,其值不随 shell 脚本的执行结束而消失。
例:
如: $PATH
[root@xuegod63 test]# echo $PATH
/usr/lib64/qt-
3.3/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin/:/usr/bin:/bin:/root/bin
#用作运行某个命令的时候,本地查找不到某个命令或文件,会到这个声明的目录去查找。
[root@xuegod63 test]# which ls
alias ls=
’
ls - - color=auto
’
/bin/ls
[root@xuegod63 test]# ls
example01.sh
上述中的 ls 因为可以在某个目录中找到,即在 /bin 上是可以找到的,所以可以直接执行 ls ;若上面没有 /bin , ls 便不能直接执行。
(2)用户定义变量
由字母或下划线打头。 由字母、数字或下划线组成,并且大小写字母意义不同。
变量名长度没有限制。在使用变量值时,要加前缀”$”。
例: 1VAR 是非法变量。(由于是数字开头所以为非法变量)
(3) 变量赋值
赋值号”=“两边应没有空格。
例1:
[root@xuegod63 test]# A=aaa
[root@xuegod63 test]# A = aaa
bash:A command not found
例2:将一个命令的执行结果赋给变量。
[root@xuegod63 test]# A=`date`
[root@xuegod63 test]# echo $A
Sat Feb 7 20:54:26 CST 2015
[root@xuegod63 test]# B=$(ls -1)
[root@xuegod63 test]# echo $B
[root@xuegod63 test]# A=$B
[root@xuegod63 test]# echo $A
例3:利用变量和其他字符组成一个新的字符串。
[root@xuegod63 test]# MYDIR=/home/mk
[root@xuegod63 test]# echo $MYDIR/zhangsan
/home/mk/zhangsan
[root@xuegod63 test]# DAY=mon
[root@xuegod63 test]# echo Today is $DAYday
Today is
[root@xuegod63 test]# echo Today is $DAY day
Today is mon day
[root@xuegod63 test]# echo Today is ${DAY}day
Today is Monday
例4:给变量赋值多个单词
[root@xuegod63 test]# NAME=
”
mike Ron
”
[root@xuegod63 test]# echo $NAME
mike Ron
[root@xuegod63 test]# NAME=
’
shen mk
’
[root@xuegod63 test]# echo $NAME
shen mk
(4)列出所有变量:
set 命令
例:
[root@xuegod63 test]# set | grep DAY
DAY=mon
(5)单引号与双引号在变量中的区别
单引号之间的内容原封不动地指定给了变量;双引号取消了空格的作用,特殊符号的含义保留。
例1:
[root@xuegod63 test]# NAME=
”
mike Ron $NAME
”
[root@xuegod63 test]# echo $NAME
mike Ron shen mk
例2:
[root@xuegod63 test]# NAME=
’
mike Ron $NAME
’
[root@xuegod63 test]# echo $NAME
mike Ron $NAME
(6)删除变量
使用 unset
例:
[root@xuegod63 test]# echo $NAME
mike Ron $NAME
[root@xuegod63 test]# unset NAME
[root@xuegod63 test]# echo $NAME
(7)位置变量
Shell 解释执行用户的命令时,将命令行的第一个字作为命令名,而其他字作为参数。由出现在命令行上的位置确定的参数称为位置参数。位置变量使用 $N 来表示。
例:
[root@xuegod63 test]# √example.sh file2 file3
$0 这个程序的文件名为 example.sh
$n 这个程序的第n个参数值,n=1..N
(8)特殊变量
有些变量是一开始执行 Script 脚本时就会设定,且不能被修改,但我们不叫它只读的系统变量,而叫它特殊变量。这些变量当一执行程序时就有了,用户无法将一般的系统变量设定成只读的。
以下是一些等殊变量:
$* 这个程序的所有参数
$# 这个程序的参数个数
$$ 这个程序的 PID
$! 执行上一个后台程序的 PID
$? 执行上一个指令的返回值
三、综合实例
(1)小综合实例
[root@xuegod63 test]# cat z.sh
#!/bin/bash
echo
“
$
”
表示这个程序的所有参数
echo
“
$
”
表示这个程序的参数个数
touch/tmp/a.txt
echo
“
$$ 表程序的进程 ID
”
touch/tmp/b.txt &
echo
“
$! 执行上一个后台指令的 PID
”
echo
“
$$ 表程序的进程 ID
”
测试:
[root@xuegod63 test]# √z.sh aaa bbb ccc
aaa bbb ccc 表示这个程序的所有参数
3 表示这个程序的参数个数
3899 表程序的进程 ID
3901 执行上一个后台指令的 PID
3899 表程序的进程 ID
(2)变量在 shell 中使用的实例
[root@xuegod63 test]# cat z1.sh
#!/bin/bash
var1=
”
abcd efg
”
echo $var1
var2=1234
echo
”
The value of var2 is $var2
”
echo $HOME
echo $PATH
echo $PWD
[root@xuegod63 test]# chmod +x z1.sh
[root@xuegod63 test]# √z1.sh
abcd efg
The value of var2 is 1234
/root
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/root/bin
/root/test