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

shell脚本学习笔记之常见语法结构用法

[复制链接]
YunVN网友  发表于 2018-8-29 07:45:17 |阅读模式
  shell脚本学习笔记之常见语法结构用法
  一,变量
  1.变量赋值和替换
  语法:variable=value
  variable=“value1 value2”
  echo  $variable/$"{variable}"   屏幕上显示赋值
  echo  $"{variable+b}"  将已经赋值的变量重新设值,临时生效
  echo  $"{variable:=value} 屏幕上显示value(前提是value没有被赋值)
  echo  $"{variable:-value} 屏幕上显示value(value未被赋值,value临时赋值)
  echo  $"{variable?}"  用于查看变量是否被赋值,赋值是什么
  设置只读变量(查看所有的只读变量用readonly即可)
  variable=value
  readonly=value   任何用户不允许对变量variable重新设置变量或unset变量
  declare/typeset
  2.无类型shell变量
  *****shell不需要声明变量类型,通过上下语句来自动识别,只支持整型和字符型
  默认为字符型,如果没有给变量赋值而带入到语句中,会根据上下文自动给变量赋值,默认为空(字符),如果上下文分析出为一个算法,
  则将变量赋值为0
  3.环境变量
  3.1定义和清除变量
  定义环境变量的基本格式
  ENVIRON-VARIABLE=value
  声明环境变量
  export  ENVIRON-VARIABLE
  例子:
  [root@node1 ~]# export APP
  [root@node1 ~]# echo "APP"
  [root@node1 ~]# echo "$APP"
  /usr/local
  查看所有的环境变量 env
  unset清除环境变量
  3.2 重要环境变量
  PWD/OLDPWD
  在PATH中添加新目录
  export PATH="/new directory":$PATH
  HOME
  echo $HOME  显示当前用户的家目录
  SHELL
  USER和UID   当前用户
  PPID   进程号
  PS1和PS2
  IFS 指定域分隔符
  3.环境变量配置文件
  .bash_profile   作用于用户登录后启动的shell(可以执行配置文件中登录后的命令)
  .bashrc         作用于子shell(子shell中使用的命令,)
  .bash_logout    作用于注销时执行配置文件中的命令
  父进程 子进程
  环境变量和本地变量的异同点
  环境变量的父shell可以向子shell传递
  本地变量的父shell 不能传递
  而环境变量和本地变量的子shell都不能向父shell进程传递
  _____________________________________________________________________
  [root@node1 scripts]# cat father.sh
  #!/bin/bash                                                          |
  #输出父进程号

  echo "Father Process>  |
  #定义本地变量并输出                                                  |
  localvar="Define a local variable."
  echo "localvar=$localvar"                                            |
  #定义环境变量并输出
  ENVVAR="Define a environment variable."
  export ENVVAR
  echo "ENVVAR=$ENVVAR"
  #调用child.sh脚本,即创建子进程
  $PWD/child.sh
  #child.sh执行完毕,输出相关变量值
  echo "Return to father process: $$"
  echo "localvar=$localvar"
  echo "ENVVAR=$ENVVAR"
  [root@node1 scripts]# cat child.sh
  #child.sh:该脚本输出自身进程号及父进程号、重新定义本地变量和环境变量
  #!/bin/bash
  #输出自身进程号及父进程号

  echo "Chile Process>
  echo "My Father Process>  #输出本地变量和环境变量的当前值
  echo "localvar=$localvar"
  echo "ENVVAR=$ENVVAR"
  #重新定义本地变量和环境变量
  localvar="Redefine this ocal variable."
  ENVVAR="Redefine this environment variable."
  echo "localvar=$localvar"
  echo "ENVVAR=$ENVVAR"
  [root@node1 scripts]# ./father.sh

  Father Process>  localvar=Define a local variable.
  ENVVAR=Define a environment variable.

  Chile Process>
  My Father Process>  localvar=
  ENVVAR=Define a environment variable.
  localvar=Redefine this ocal variable.
  ENVVAR=Redefine this environment variable.
  Return to father process: 5429
  localvar=Define a local variable.
  ENVVAR=Define a environment variable.
  _____________________________________________________________________
  4.参数
  $N     赋值变量
  $#     变量个数
  $*/$@  列出所有变量
  $$     执行的shell进程号
  $?     显示是否错误0/1
  __________________________________________________
  [root@node1 scripts]# ./a.sh a b c d e f j
  the scripts is ./a.sh
  the part1 #1 a
  the part2 #2 b
  all parts a b c d e f j
  the pats are 7
  the error 0
  the shell process 4898
  [root@node1 scripts]# cat a.sh
  #!/bin/bash
  echo "the scripts is $0"
  echo "the part1 #1 $1"
  echo "the part2 #2 $2"
  echo "all parts $*"
  echo "the pats are $#"
  echo "the error $?"
  echo "the shell process $$"
  _________________________________________________
  ==========================================================================
  二、引用
  "" 引用除$,`,\外所有字符
  '' 引用所有字符
  `` shell解释为系统命令
  \ 转义符,即屏蔽下一个字符的特殊意义
  1. 全引用和部分引用
  ”“  ‘’
  2.命令替换
  `linux命令`
  $(linux命令)
  需要理解 x y  ”x y“
  ``和$()的区别
  3.转义符
  在使用echo时
  $''=-e
  a=1
  a="1 2”
  **************************************************************************
  $?
  0表示运行成功
  非0表示失败
  echo $? 0或其他------  用于测试判断语句
  ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  三.退出状态
  1.测试结构
  test
  格式:test expression
  2.整数比较运算符
  整数比较------  用于测试判断语句或循环语句
  -eq
  le
  ge
  lt
  gt
  ne
  3字符串运算符----- 用于测试用户输入是否为空或比较字符串变量
  string 测试string是否不为空
  -n string 测试是否不为空
  -z string 测试是否为空
  string1=string2 测试string1和string2是否相等
  sring1!=string2 测试string1和string2是否不相等
  格式 [ "string1" =/!=  string2 ]
  4.文件操作符
  file 为目录,文件,或文件路径
  -d file  测试file是否为目录
  -f       测试file是否存在
  -r 测试file是否为普通文件
  -s       测试file是否是进程可读文件
  -w      测试file是否是进程可写文件
  -x       测试file是否是进程可执行文件
  -L        测试file的长度是否不为0
  -e       测试file是否符号链接
  格式 [ -d file ]
  逻辑运算符
  !expression 非    如果为假,则test为真
  expression1 -a expression2 与    如果都为真,则test为真
  expression1 -o expression2 或    如果有一个为真,则test为真
  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  三.判断
  1.简单的if结构
  if expression
  then
  command
  command
  ...
  fi
  2.exit命令
  exit status
  3.if/else结构
  if expression1
  then
  command
  ...
  command
  else
  command
  ...
  command
  fi
  4.if/else嵌套语句
  if expression1
  then
  if expression2
  then
  command
  command
  ...
  else
  command
  command
  ...
  fi
  else
  if expression3
  then
  command
  command
  ...
  else
  command
  command
  ...
  fi
  fi
  5.if/elif/else结构
  if expression1
  then
  command
  command
  ...
  elif  expression2
  then
  command
  command
  ...
  elif expresionN
  then
  command
  ...
  command
  else
  command
  ...
  command
  fi
  6.case结构
  caase variable in
  value1)
  command
  ...
  command;;
  value2)
  command
  ...
  comand;;
  ...
  valueN)
  command
  ...
  command;;
  *)
  command
  ...
  command;;
  esac
  ++++++++++++++++++++++++++++++++++++++++++++++++++++
  四、运算符
  1.算术运算符
  运算符            举例            结果
  +(加运算)         3+5            8
  -(减运算)         5-3            2
  *(乘运算)         5*315
  /(除运算)         8/3            2
  %(取余运算)       15%4           3
  **(幂运算)       5**3           125
  算术复合赋值运算符
  运算符     举例           等价表达式
  +=         v+=5          v=v+5
  -=         v-10          v=v-10
  *=         v*=5          v=v*5
  /=         v/=3          v=v/3
  %=         v%=5          v=v%5
  2.位运算符
  运算符                 举例                解释或value值
  2             8右移2位,value值为2
  &(按位与)          value=8&4              8按位与4,value值为0
  |(按位或)          value=8|4              8按位或4,value值为12
  ~(按位非)          value=~8               按位非8,value值为-9
  ^(按位异或)        value=10^3             10按位异或3,value值为9
  复合运算符
  运算符         举例                     等价表达式
  2
  &=            value&=4                  value=value&4
  |=            value|=4                  vale=value|4
  ^=            value^=3                  value=value^3
  4.自增自减运算符
  ++++++++++++++++++++++++++++++++++++
  循环
  1.列表for循环
  for variable in {list}
  do
  command
  command
  ...
  done
  2.不带列表for循环
  for variable
  do
  command
  command
  ...
  done
  3.类c风格的for循环
  for(( expr1;expr2;expr3 ))
  do
  command
  command
  ...
  done
  ++++++++++++++++++++++++++++++++++++++++
  while循环
  while expression
  do
  command
  command
  ...
  done
  1.计数其控制的while
  couter = 1
  while expression
  do
  command
  ...
  let command to operate counter
  command
  ...
  done
  2.结束标记控制的while循环
  read variable
  while  [[ "$variable" != sentinel ]]
  do
  read variable
  done
  3.标志控制的while循环
  signal=0
  while (( singal !=1 ))
  do
  ...
  if expression
  then expression
  signal=1
  fi
  ...
  done
  4.命令行控制的while循环
  while [[ "$*" != ""]]
  do
  echo "$!"
  shift
  done
  while [[ "$#" -ne 0 ]]
  ++++++++++++++++++++++++++++++++++++++++++++++++++++++
  until循环
  until expression
  do
  command
  command
  ...
  done


运维网声明 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.iyunv.com/thread-557915-1-1.html 上篇帖子: Shell编程之环境变量配置文件 下篇帖子: shell简介 linux由什么语言编写
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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