shell 的变量及四则运算

来源:互联网 发布:手机楼梯设计软件 编辑:程序博客网 时间:2024/05/21 02:49
编译型语言:优点,执行效率较高;缺点,依赖于编译器 C C++,兼容性不好解释型语言:程序不需要编译,执行效率相对较低,兼容性好,跨平台;shell、python、ruby、perl总结:Linux组成:kernel、文件系统、应用程序、shellshell:人机交互的一个桥梁;解释器打开一个终端(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=123echo $a123su - redhatbash# unset a 取消变量定义环境变量:当前进程有效,并且能被子进程调用env 查看当前系统的环境变量set 查看当前系统的环境变量和临时变量HI=helloexport HI或者# export HELLO=abc全局变量:全局所有用户和进程都能调用,且继承,新建用户也能调用/etc/profileHI=helloexport HI或者export HELLO=abc系统变量(bash中内置的变量):shell本身已经固定好的一些变量$#:脚本后面接参数个数$*:脚本后面所有的参数$@:脚本后面所有的参数$?:上一条命令执行后返回的状态状态值:0:非0127:command not found(命令未安装|环境变量)126:找到了命令但是无法执行|权限不够1&2:没有找到文件或目录$$:当前进程的进程号$!:后台运行的最后一个进程号!$:最后一条命令或参数!!:最后一条命令的历史记录位置参数:$0:当前程序的程序名或进程$1~$9:位置参数变量${10}~${n}:位置参数vim 2.sh#!/bin/bashecho "\$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=123A="1 2 3"A='1 2 3'A =123A= 123调用变量:$变量名 ${变量名}[root@node1 shell01]# A=123456789[root@node1 shell01]# echo $A123456789[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 $A1B123[root@node1 shell01]# 1AB=123bash: 1AB=123: command not found[root@node1 shell01]# ?A=123bash: ?A=123: command not found[root@node1 shell01]# _A=123[root@node1 shell01]# echo $_A1234、将命令所执行的结果保存到变量# A=`uname -r`[root@node1 shell01]# echo $A2.6.32-431.el6.x86_64[root@node1 shell01]# a=$(hostname)[root@node1 shell01]# echo $anode1.uplook.com5、数组数组的定义:用小括号扩起来定义数组,括号里的元素用空格隔开array=(var1 var2 var3)或者array[0]=var1array[1]=var2array[2]=var3取值:${array[0]}${array[*]}${array[@]}hello,user1hello,user2hello,user3user=(user1 user2 user3)for i in ${user[@]}  do    echo "hello,$i"  done# for i in ${user[@]};do echo "hello,$i";donehello,zhangsanhello,lisihello,wanger6declare 定义有类型的变量-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 $a1.shdirname:取出目录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 $ahello/shell/shell01/1.sh[root@node1 shell01]# echo ${a%%/*}hello简单的四则运算:默认的四则运算:+ - * / %$(()) $[] expr let102 * 11100 / 71008 取余20的平方1.520echo 1.5+20|bc
0 0
原创粉丝点击