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

linux shell 高级(一)

[复制链接]

尚未签到

发表于 2018-8-24 12:06:00 | 显示全部楼层 |阅读模式
  一、 变量和运算符
  1.set命令 可以查看和设置本地变量
  2.readonly 查看本地只读变量
  readonly variable-name 设置变量为只读变量
  3.环境变量的设置在$HOME/.bash_profile (/etc/profile)中
  4.export variable-name=value 设置变量为环境变量
  5.env 查看所有环境变量
  6.变量替换:
  ${var-name}显示实际值到var-name
  ${var-name:+value}如果设置了var-name,则显示其值为value,否则为空
  ${var-nmae:?value}如果未设置var-name,显示用户定义错误信息value
  ${var-name:-value}如果未设置var-name,显示其值为value
  ${var-nmae:=value}如果未设置var-name,设置其值,并显示
  7.unset 取消变量
  8.位置变量
  $0       $1           $2           $3     $4
  脚本名   第一个参数 A   第二个参数 B   。。。。C   。。。。D
  注意:$10是表示第一个参数后面加上“0”,第10个参数可以通过shift命令得到
  可用shift 或者shift[n]来表示左移参数的位置
  shift与shift[1]相同,都是左移一个位置(从$1开始算,$0-脚本名是不会边的),如上图则$1的 值 为   B,$2的值为C......
  $# 参数的个数($0不算在内)
  $* 和 $@ 都是列出全部参数,下面举例说明它们的差异:
  比如在命令行中输入 ./test.sh A "B C" D
  则 $*和$@都为 A B C D
  但是如果用了软引用之后:
  "$@"可得到 "A" "BC" "D"三个字段
  而"$*"则得到"A B C D"一个字段
  9.标准变量(大部分都是环境变量):
  EXINIT:保存使用vi初始化选项,如EXINIT='set nu tab=4';exprot EXINIT
  IFS:域分隔符,默认是空格,可改边IFS=: 或 IFS=':'
  HOME:主目录
  LOGNAME:登录名
  MAILCHECK:每隔多长时间检查是否有邮件
  MAILPATH:用于多个邮箱时查看MAIL存储在哪几个文件中
  TERM:终端类型
  PATH:指定了当用户输入命令时linux搜索程序的目录由冒号:分隔,shell将按PATH中给出的顺序搜 索这些目录。找到的第一个与命令名称一致的可执行文件将被执行
  TZ:时区
  PS1:主提示符,其缺省值 '[\u@\h \w]\$ '
  u:用户 h:主机名 w:当前的目录。最后的"$"是普通用户的提示符,特权用户是"#"
  PS2:辅助提示符,一行中若需用多个命令时的提示符,缺省是">",如果用户在行末输入"\",然后 回车, 则会有改符号出现。
  PWD:当前运行的进程号
  $$:当前运行的进程号
  $!后台运行的最后一个进程的ID
  $- 显示shell使用的当前选项,与set相同
  $? 显示最后命令的退出状态,0表示没有错误,其他表示错误。
  10.影响变量的命令
  (1)declare   设置或者显示变量
  -f     只显示函数名
  -r     创建只读变量
  -x     创建转出变量
  -i     创建整数变量
  用+代替-可以颠倒选项的含义(r不能颠倒)
  (2)export 创建传给子shell的变量(创建环境变量)
  --表明选项结束,所有的后续参数都是实参
  -f表明在“名-值”对中的名字是函数名
  -n把全局变量转换成局部变量,命令的变量不再传给子shell
  -p显示全局变量列表
  (3)readonly 用于显示或者设置只读变量
  --表明选项结束
  -f创建只读变量
  (4)typeset   用于显示或设置变量,是declare的同义词
  (5)unset 取消变量的定义
  --表明选项结束
  -f删除只读变量(但不能取消从shell环境中删除指定的变量和函数,如PATH,PS1,PDID,EUID,PID,UID等)
  11.双引号:
  使用双引号可引用除字符$,`,\ 外的任意字符和字符串
  12.单引号:
  单引号与双引号不同的是shell会忽略任何引用值。换句话来说,如果屏蔽了其特殊含义,会将引号里所有的字符,包括引号作为一个字符串
  13.反引号:
  设置系统命令的输出到变量。shell将反引号里的命令的内容作为一个系统命令并执行其内容
  14.反斜杠:
  如果一个字符有特殊的意义,反斜杠可以屏蔽其含义,有特殊含义的字符有:& * + ^ $ ` " | ?
  15.运算符:
  按位运算符有:~ ,,^>|,&
  $[ ]表示对方括号中的表达式求值 $[ 2+8 ].(注意[]内左右都必须留空格)
  $[ 2#111+1 ]=8 表示二进制的1111+1
  运算符的优先级
  以下级别高的优先级高
  13级:+,- (正负)
  12级:!,~ (逻辑非,按位取反)
  11级:*,/,% (乘,除,取摸)
  10级:+,- (加减)
  9级:按位左移动,右移
  8级:=, (小于等于,大于等于,小于,大于)
  7级:==,!= (等于,不等于)
  6级:& 按位与
  5级:^ 按位异或
  4级 | 按位或
  3级&& 逻辑与
  2级 || 逻辑或
  1级=,+=,-=,*=,/=,%=,|=,=
  二、Shell输入与输出
  1.echo 命令可以显示文本行或者变量,或者把字符串输入到文件
  echo [option] string
  -e 解析转义字符,
  转义符包括(
  \c,回车不换行
  \f,禁止
  \t,跳格
  \n)回车换行
  -n 回车不换行,linux系统默认回车换行
  2.read 从键盘或者文件的某一行文本中读如信息,并将其赋给一个变量
  read varible1 varible2
  如果只指定了一个变量,那么read将会把所有的输入赋给该变量,直到遇到第一个文件结束符或回车;如果给出了多个变量,它们按吮吸分别赋给不同的变量,。shell将用空格作为变量之间的分隔符
  举例说明:在shell脚本中有read A B C命令行,而在提示的命令行中输入1 2 3,则A=1,B=2,C=3
  3.cat 可以用来显示文件内容、创建文件,还可以用它来显示控制字符。
  cat |options|filename1..filename2...
  -v显示控制字符
  使用cat命令时要注意,它不会在文件分页符处停下来,它会一下显示完整个文件。如果希望每次显示一页,可以使用more命令或者把cat命令的输出通过管道传递给另外一个具有分页功能的命令(如more,less)中。
  cat命令举例:
  cat myfile1 myfile2 myfile3>myfile123;
  cat myfile123|more 分页显示
  cat -v dos.txt 会出现“^M”等控制字符,这是在windows下的编辑器留下的
  4.管道 可以通过管道把一个命令的输出作为另一个命令的输入
  举例说明:df -k |awk '{print $1}'|grep -v "Filesystem"
  df:显示所有文件系统对i节点和磁盘块的使用情况
  awk:浏览和抽取信息
  grep:文本过滤
  显示所有文件系统对i接点和磁盘块的使用情况信息中的第一列并不含有"Filesystem"的信息
  5.tee : 把输出的一个副本输送到标准输出,另一个副本拷贝到相应的文件中
  tee -a file 这个命令一般用于管道之后。
  举例说明:
  cat file|tee file.out 将file中的信息输出到屏幕并拷贝到file.out中
  6.exec : exec命令可以用来代替当前shell;换句话说,并没有启动子shell,使用这一命令时任何现有环境都会   被清除,并重新启动一个shell
  exec command其中的command通常是一个shell脚本
  对文件描述符操作的时候(也只有在这时),它不会覆盖你当前的shell
  举例说明:
  exec **.sh 会重新登录并清除环境变量
  7.标准输入、输出和错误
  在shell中执行命令时,每个进程都和三个打开的文件相联系,并使用文件描述符来引用这些文件。由于文件描述符不容易记忆,shell同时也给出了相应的文件名。
  文件         文件描述符
  输入文件----标准输入       0(缺省是键盘,也可以是文件或者其他命令的输出)
  输出文件---标准输出       1(缺省是屏幕,也可以是文件)
  错误输出文件--标准错误   2(缺省是屏幕,也可以是文件)
  系统中实际有12个文件描述符,可以任意使用文件描述符3-9
  8.文件重定向 改变程序运行的输入来源或输出地点
  command > filename 把把标准输出重定向到一个新文件中
  command >> filename 把把标准输出重定向到一个文件中(追加)
  command 1 > fielname 把把标准输出重定向到一个文件中
  command > filename 2>&1 把把标准输出和标准错误一起重定向到一个文件中
  command 2 > filename 把把标准错误重定向到一个文件中
  command 2 >> filename 把把标准输出重定向到一个文件中(追加)
  command >> filename 2>&1 把把标准输出和标准错误一起重定向到一个文件中(追加)
  command < filename >filename2 把command命令以filename文件作为标准输入,以filename2文件作为标准输出
  command < filename 把command命令以filename文件作为标准输入
  command file会造成死循环,因为它是一行行读出来的,永远都没有结束符
  9.合并标准输出和标准错误
  合并标准输出和标准错误的时候,切记shell是用左至右分析相应的命令
  举例说明:
  grep "hi" test.txt >test.out 2>&1 标准输出和错误输出都输入到标准输出中
  10.使用文件描述符
  举例说明:
  exec 3

运维网声明 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-555954-1-1.html 上篇帖子: shell for 循环用法 下篇帖子: 转:shell中的if语句
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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