设为首页 收藏本站
查看: 726|回复: 0

变量及shell编程

[复制链接]

尚未签到

发表于 2018-8-23 10:57:41 | 显示全部楼层 |阅读模式
  编程能力:
  脚本编程
  编程语言:机器语言,汇编语言,高级语言
  高级语言:
  静态语言:编译型语言
  不需要借助额外的二进制,需要一个编译器,直接转换为二进制运行的。
  强类型(变量):变量在使用前, 必须事先声明,甚至还需要初始化
  关键字:
  事先转换成可执行格式
  c、c++、java、c#
  动态语言:解释型语言 on the fly
  弱类型语言:变量随时(用时)声明,不区分类型
  边解释边执行
  asp asp.net php shell python perl
  面向过程:shell ,c,perl,
  面积对象:java,python,perl,c++
  变量类型:直接决定了变量的储存格式,用来确定数据的存储格式和长度
  字符
  数值
  时期
  真假型
  逻辑运算:与(乘)、或、非、异或
  1:真
  0:假
  1&0=0
  0&1=0
  0&0=0
  1&1=1
  或:只一一个为真就为真,同时为假就为假
  非:!真=假 !假=真
  异或:操作数相同者为假, 不同者为真,相同者为零,否者为1
  与:只要有一个为假,结果为假
  或:只要有一个为真,结果为真
  整形
  浮点型 11.23 1.123*10^1 | 0.1123*10^2
  变量:内存空间,命名的内存空间,
  变量名称:
  1、只能包含字母,数字,下划线,并且不能数字开头。
  2、不应该跟系统中已有的环境变量重名。
  3、最好做到见名知义
  内存:编址的存储单元
  进程:
  Bash变量类型:
  引用变量:${VARNAME},默认{}可以省略,例:
  ANIMAL=pig
  echo "There are some ${ANIMAL}s."
  1、环境变量:
  作用域为当前shell进程及其子进程
  exprot VARNAME=VALUE "导出"
  脚本在执行时使用时会启动一个子shell进程
  命令行启动的脚本会继承当时shell环境变量;
  系统自动执行的脚本(非命令行启动)就需要自我定义需要的各环境变量
  2、本地变量(局部变量)
  bash:进程的变量
  VARNAME=VALUE,本地变量,作用域为整个bash进程有用;
  local VARNAME=VALUE,局部变量,作用域为当前代码段
  3、位置变量
  $1,$1,$2......
  4、特殊变量(Bash内置的,也称系统变量)
  是为了保存特殊数据的,例:$?:上一个命令的执行状态返回值;
  程序执行结果
  程序状态返回代码(0-255)
  0:正确执行
  1-255:错误执行,1,2,127系统预留:
  撤消变量:
  unset VARNAME
  查看当前shell中变量:
  set (包括环境变量和本地变量)
  查看当前shell中的环境变量:
  printenv
  env
  export
  一个变量对应多个值:
  ANIMAL=pig:dog:goat 或者:ANIMAL=$ANIMAL:pig
  输出重定向:
  >
  >>
  2>
  2>>
  &> 同时重定向
  /dev/null
  id student &> /dev/null
  脚本:命令的堆砌,按实际需要,结合命令流程控制机制实现的源程序
  #!/bin/bash
  #注释行,不执行
  Bash中如何实现条件判断?
  条件测试类型:
  1、整数测试
  2、字符测试
  3、文件测试
  条件测试的表达式:
  [ expression ] 命令
  ` expression ` 关键字
  test expression
  整数比较:
  需要两个操作数
  -eq:测试两个整数是否相等,比如:$A -eq $B
  [ $A -eq $B ]
  -ne:测试两个整数是否不等,不等为真,相等为假
  -gt:测试一个数是否大于另一个数,大于为真,否则为假
  -lt:测试一个数是否小于另一个数,小于为真, 否则为假
  -ge:大于或
  -le:小于或等于
  命令间的逻辑关系:

  逻辑与:&&>  第一个条件为假时,第二个条件不用判断,最终结果已经有了。
  第一个条件为真时,第二个条件必须得判断
  逻辑或:||
  !id user6 && useradd user6 前面为假就不执行,为真就执行
  id user6 || useradd user6 如果前面为真就不执行,为假就执行
  如果用户存在,就显示用户已存在,否则就添加此用户:
  id user1 && echo "use1 exists" || useradd user1
  如果用户不存在,就添加,否则显示其已经存在

  !>  如果用户不存在,添加并且给密码,否则,显示其已经存在;
  !id user1 && useradd user1 && echo "user1" | passwd --stdin user1 || echo "user1 exists"
  例:
  #!/bin/bash
  !id user1 &> /dev/null && useradd user1 && echo "user1" | passwd --stdin user1 &> /dev/null || echo ""user1 exists."
  !id user2 &> /dev/null && useradd user2 && echo "user2" | passwd --stdin user2 &> /dev/null || echo ""user2 exists."
  !id user3 &> /dev/null && useradd user3 && echo "user3" | passwd --stdin user1 &> /dev/null || echo ""user3 exists."
  USERS=`wc -l /etc/passwd | cut -d'' -f1
  echo "$USERS users"
  #!/bin/bash
  NAME=user1
  USERID=`id -u $name`
  [ $USERID -eq 0 ] && echo "This is root" || echo "This is not root"
  条件判断,控制结构
  单分支if语句:
  if判断条件;then
  statement1
  statement2
  ...
  fi
  例:
  #!/bin/bash
  NAME=user1

  if>  ehco "$NAME exists."
  fi
  双分支的if语句:
  if 判断条件;then
  statement1
  statement2
  ...
  else
  statement1
  statement2
  ...
  fi
  例:
  #!/bin/bash
  NAME=user1

  if>  ehco "$NAME exists."
  else
  echo "$NAME not exist"
  fi
  #!/bin/bash
  NAME=root
  if [ `id -u $NAME`  -eq 0 ]; then
  echo "This is Admin"
  else
  echo "This is not Admin"
  fi
  shell运算:
  方法一:let
  $A=3
  $B=6
  let C=$A+$B
  echo $C
  方法二:
  A=3
  B=6
  $[算术运算表达式]
  C=$[$A+$B]
  echo $c
  方法三:
  $((算术运算表达式))
  C=$(($A+$B))
  方法四:expr 算术表达式,表达式中各操作数及运算符之间要有空格,而且要使用命令引用
  c=`expr $a + $b `
  let 算法公式:
  1、  let I+=1,相当于let I++(只有每次+1,才能写成++)
$I=10  
let I+=1
  
echo $I
  
11
I=10  
let I++
  
echo $I
  
11
  2、
  -=
  let I-=1 相当于 let I--
  ++I ,--I
  *=
  /=
  %=
I=14  
let $I%=3
  
echo $I
  
2
#!/bin/bash  
#
  
declare -i EVENSUM=0
  
declare -i ODDSUM=0
  
for I in {1..100};do
  
    if [ $[$I%2] -eq 0 ];then
  
        let EVENSUM+=$I
  
    else
  
        let ODDSUM+=$I
  
    fi
  
done
  
echo "Even sum is $EVENSUM"
  
echo "ODD sum is $ODDSUM"
  exit:退出脚本
  文件测试:
  -e FILE:测试文件存在
  -f FILE:测试文件是否为普通文件;、
  -d file:测试指定路径是否为目录。
  -r file :测试当前用户对指定文件是否有读权限
  -w file:写
  -x file:执行
  if [ -e /etc/inittab ] ,[ -x /etc/rc.d/rc.sysinit ]
  多分支的if语句
  if 判断条件1;then
  statement1
  ....
  elif 判断条件2;then
  statement2
  ...
  elif 判断条件3;then
  statement3
  ...
  else
  statement4
  fi
  测试脚本是否有语法错误:
  bash -n file 测试语法错误
  bash -x file 单步执行,排错手法
  bash变量类型:
  本地变量
  环境变量
  位置变量:
  $1,$2...
  shift (轮换)
  例:#!/bin/bash
  echo $1
  shift
  echo$1
  shift
  echo$1
  # ./filename 1 2 3
  特殊变量:
  $?
  $# 参数的个数
  $* 参数列表
  $@ 参数列表
  #!/bin/sh
  if [ $# -lt 1 ]; then
  echo 'Usage: ./filename.sh ARG1 [ARG2...]'
  exit 9
  fi
  if [ -e $1 ];then
  echo 'OK'
  else
  echo 'no such file'
  fi
  echo '$[$1+$2]' 可以直接引用到这样的格式。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-555472-1-1.html 上篇帖子: linux 子shell-whuang 下篇帖子: 变量及shell编程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表