SHELL初始:基本变量、环境变量、预定义变量、运算法
SHELL
Shell是什么
是命令行解释器。用户用它来向Linux内核发送请求来运行程序,命令要发送给Linux理解,必须要用到Shell。
如下图:
Shell编程的作用
服务器集群管理的时候,用来进行服务器管理。
执行Shell脚本或者是维护服务器,比如编写一个定时备份数据库的脚本。
例:编写一个在终端输出"Hello,World"的脚本
1、创建某个文件hello.sh
mkdir /root/shcode //在根下创建一个目录shcode
cd /root/shcode //进入
vim hello.sh
2、按照以下格式输入
#!/bin/bash //必须有,放在第一行,是基本格式
echo "Hello,World!" //目标语句
3、赋予执行权限
chmod u+x hello.sh
4、执行
./hello.txt //当前目录下执行
/root/shcode/hello.sh //绝对路线下执行
5、改进(去掉赋予权限环节,即代替3 4)
sh hello.sh //不需要赋予权限,直接执行。
6、结果
Hello,World!
Shell基本变量
定义
变量名称一般习惯为大写,是规范,遵守即可。
注意:定义变量在等号两侧不能带空格,当然,以下都是写在.sh
的文件下
定义变量
A=100
声明静态变量
readonly B=2 //此时的B是静态的了,不能unset
定义指令
用到反引号,是横排数字的最左边的键
A=`date` //把今天的日期赋值给A,这如果没有反引号,就是把date这个单词给A
A=$(date) //等效
撤销变量
unset A
输出变量
echo "A=$A"
设置环境变量
如果有好几个.sh
文件,都要用到一个变量呢?
那就,设置环境变量(全局变量)
首先,在特定文件中,定义一个环境变量
写入过后需要以下刷新,立即生效
source
之后就通用了。
export PATHA=100 将shell变量输出为环境变量/全局变量
source 配置文件 让修改后的配置信息立即生效
echo $变量名 查询变量环境的值
位置参数变量(传入命令行给定的参数)
基本语法
$n //n是数字,¥0是命令本身,¥1-¥9表示第一到第九个参数,十以上的参数需要用大括号表示,如¥{10}
$* //命令行中所有参数
$@ //代表命令行中所有参数
$# //代表命令行中所有参数的个数
例:编辑一个文件myshell.sh
#!/bin/bash
echo "$0 1=$1 2=$2"
echo "AllParameters=$*"
echo "$@"
echo "NumberofParameters=$#"
终端
sh myshell.sh 100 200 //这里带上两个参数
结果
myshell.sh 1=100 2=200
AllParameters=100 200
100 200
NumberofParameters=2
预定义变量
shell中已经事先定义好的变量,可以直接在shell脚本中使用
基本语法
$$ //当前进程号PID
$! //后台运行的最后一个进程点击i进程号PID
$? //最后一次执行的命令的返回状态,如果返回值为0,则说明最后一次是正常执行执行,其他数字就不正确。
例:编辑一个文件A.sh
,并使之执行另一个文件hello.sh
#!/bin/bash
echo "NowPID=$$"
#以后台的方式运行一个脚本并得到它的进程号
/root/shcod/hello.sh & //后面带个&就会以后台的方式运行
echo "LastPID=$!"
echo "Result=$?"
终端输入
sh A.sh
结果
NowPID=11076
LastPID=11077
Result=0
Hello,World!
运算符
\*乘 除/ +加 -减
运算式
$[]
$(())
expr m + n //expression,这里的m与n之间需要有空格
例1:计算(2+3)x 4
#!/bin/bash
#第一种
RES1=$(((2+3)*4))
#第二种
RES2=$[(2+3)*4]
#第三种
TEMP= expr 3 + 2
RES3= expr $TEMP \* 4
echo RES1=$RES1
echo RES2=$RES2
echo RES3=$RES3
结果
RES1=20
RES2=20
RES3=20
例2:求出命令行给定的两个参数(整数)之和
编辑文件A.sh
#!/bin/bash
SUM=$[$1+$2]
echo $SUM
执行
sh A.sh 7 13 //结果 20
---------------------------
“朝着一个既定的方向去努力,就算没有天赋,在时间的积累下应该也能稍稍有点成就吧。”