shell 的变量及四则运算

编译型语言:优点,执行效率较高;缺点,依赖于编译器 C C++,兼容性不好
解释型语言:程序不需要编译,执行效率相对较低,兼容性好,跨平台;shell、python、ruby、perl

总结:

Linux组成:kernel、文件系统、应用程序、shell
shell:人机交互的一个桥梁;解释器

打开一个终端(bash的一个接口)
    |
   bash bash shell shell的一种 csh sh...
    |
   kernel
    |
  硬件

什么是shell脚本?
 简单来说,是将一堆命令保存在一个文件中,然后按照顺序去执行。

若干命令+脚本基本格式+脚本特定语法+思想=shell脚本

什么时候会用到shell脚本?

如何去学习shell脚本?
 1、尽可能多的记住一些命令
 2、掌握脚本的标准格式(#!魔法字符 指定解释器 /bin/bash /bin/sh ..)
 3、必须熟练掌握脚本的基本语法
    变量定义
    条件判断
    分支语句
    循环语句
    函数
    数组
    正则表达式、awk、sed

秘诀:多看多写多思考

怎么执行脚本:
非标准:
  672  bash 1.sh 
  673  sh 1.sh 
  674  source 1.sh 
  675  . 1.sh 
  676  bash -x 1.sh 
  677  vim 1.sh 
  678  bash 1.sh 
  679  bash -x 1.sh 
脚本文件可以不用有可执行权限;不建议
bash -x 1.sh  -x显示脚本执行过程的信息,帮助排错
标准:
1.sh
#!/bin/bash  魔法字符,表示该脚本使用哪种解释器去解释
...

chmod +x 1.sh  脚本要有可执行权限
执行:
./1.sh  相对路径表示该脚本 
/shell/shell01/1.sh 绝对路径执行


bash shell的符号:
双引号(""):将引号里的内容当作整体;允许通过$()去引用其他变量
单引号(''):将引号里的内容当作整体;不允许通过$()去引用其他变量
反撇号(``):引号里面的命令优先执行,和$()含义是一样的;如果有嵌套那么不能用``号

$(())和 $[]:运算符

; :可对命令进行分割;不去考虑上一条命令所执行的结果
&&:逻辑与;可对命令进行分割;但是需要考虑上一条命令所执行的结果
||:逻辑或;可对命令进行分割;不需要考虑上一条命令执行结果

变量分类:
本地变量:当前用户自定义的变量;当前进程有效,其他进程或者当前进程的子进程无效
a=123
echo $a
123
su - redhat
bash
# unset a 取消变量定义

环境变量:当前进程有效,并且能被子进程调用
env 查看当前系统的环境变量
set 查看当前系统的环境变量和临时变量
HI=hello
export HI
或者
# export HELLO=abc

全局变量:全局所有用户和进程都能调用,且继承,新建用户也能调用
/etc/profile
HI=hello
export HI
或者
export HELLO=abc

系统变量(bash中内置的变量):shell本身已经固定好的一些变量
$#:脚本后面接参数个数
$*:脚本后面所有的参数
$@:脚本后面所有的参数
$?:上一条命令执行后返回的状态
状态值:
0:
非0127:command not found(命令未安装|环境变量)
126:找到了命令但是无法执行|权限不够
1&2:没有找到文件或目录

$$:当前进程的进程号
$!:后台运行的最后一个进程号
!$:最后一条命令或参数
!!:最后一条命令的历史记录

位置参数:
$0:当前程序的程序名或进程
$1~$9:位置参数变量
${10}~${n}:位置参数

vim 2.sh
#!/bin/bash
echo "\$0 = $0"
echo "\$# = $#"
echo "\$* = $*"
echo "\$@ = $@"
echo "\$1 = $1"
echo "\$2 = $2"
echo "\$7 = $7"
echo "\$10 = ${10}"
echo "\$11 = ${11}"

chmod +x 2.sh


# ./2.sh a b c
$0 = ./2.sh
$# = 3
$* = a b c
$@ = a b c
$1 = a
$2 = b
$7 = 
$10 = 
$11 = 
# ./2.sh a b c v b f u o p 7 9
$0 = ./2.sh
$# = 11
$* = a b c v b f u o p 7 9
$@ = a b c v b f u o p 7 9
$1 = a
$2 = b
$7 = u
$10 = 7
$11 = 9


变量的定义:
1、默认情况下,变量类型没有什么要求。可以给变量赋任何值,但是等号两边不能有任何的空格。
A=123
A="1 2 3"
A='1 2 3'
A =123
A= 123

调用变量:
$变量名 ${变量名}

[root@node1 shell01]# A=123456789
[root@node1 shell01]# echo $A
123456789
[root@node1 shell01]# echo ${A:3:3} 
456
[root@node1 shell01]# echo ${A:2:3}
345

${A:3:3}
A:变量名
3:从第3-1位开始截取;0代表从第1位开始
3:截取32、变量名区分大小写
3、变量名不能以数字或者特殊符号开头
# A1B=123
[root@node1 shell01]# echo $A1B
123
[root@node1 shell01]# 1AB=123
bash: 1AB=123: command not found
[root@node1 shell01]# ?A=123
bash: ?A=123: command not found
[root@node1 shell01]# _A=123
[root@node1 shell01]# echo $_A
123

4、将命令所执行的结果保存到变量
# A=`uname -r`
[root@node1 shell01]# echo $A
2.6.32-431.el6.x86_64
[root@node1 shell01]# a=$(hostname)
[root@node1 shell01]# echo $a
node1.uplook.com

5、数组
数组的定义:用小括号扩起来定义数组,括号里的元素用空格隔开
array=(var1 var2 var3)
或者
array[0]=var1
array[1]=var2
array[2]=var3

取值:
${array[0]}
${array[*]}
${array[@]}


hello,user1
hello,user2
hello,user3

user=(user1 user2 user3)
for i in ${user[@]}
  do
    echo "hello,$i"
  done

# for i in ${user[@]};do echo "hello,$i";done
hello,zhangsan
hello,lisi
hello,wanger

6declare 定义有类型的变量
-i:将变量看成整数
-r:定义只读变量
-x:将变量导出到环境变量
-a:将变量看成数组


7read 交互式定义变量
-p:提示信息
-n:字符数
-t:超时
-s:不显示

8、其他变量
[root@node1 shell01]# a=/shell/shell01/1.sh 
[root@node1 shell01]# echo $a
/shell/shell01/1.sh
[root@node1 shell01]# dirname $a
/shell/shell01
[root@node1 shell01]# basename $a
1.sh

dirname:取出目录
basename:取出文件名

%:从右往左匹配
%%:从右往左最大程度匹配
#:从左往右匹配关键字
##:从左往右匹配关键字

[root@node1 shell01]# echo ${a%/*}
/shell/shell01
[root@node1 shell01]# echo ${a%%.*}
/shell/shell01/1
[root@node1 shell01]# echo ${a%%/*}

[root@node1 shell01]# a=hello/shell/shell01/1.sh
[root@node1 shell01]# echo $a
hello/shell/shell01/1.sh
[root@node1 shell01]# echo ${a%%/*}
hello


简单的四则运算:
默认的四则运算:+ - * / %
$(()) $[] expr let

102 * 11
100 / 7
1008 取余
20的平方

1.520

echo 1.5+20|bc
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值