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

linux--shell脚本笔记之一。

[复制链接]

尚未签到

发表于 2018-8-29 14:12:31 | 显示全部楼层 |阅读模式
  shell脚本(1)
  Shell脚本是一个特殊的应用程序,负责接收用户输入的操作命令并进行解释,将需要执行的操作传递给内核执行,并输出执行结果。可以在/etc/shells文件查看当前系统所支持的shell种类。
  [root@localhost~]# cat /etc/shells
  /bin/sh
  /bin/bash
  /sbin/nologin
  /bin/tcsh
  /bin/csh
  /bin/ksh
  其中/bin/bash是目前大多数linux版本采用的默认shell,全称为Bourne AgainShell
  脚本的二种执行方法
  一、./first.sh     这种执行方法需要给first.sh脚本一个执行权限:chomod+x first.sh
  二、sh /first.sh      这种执行方法不需要给first.sh脚本执行权限,也可通过Source“.”执行
  . first.sh 或者source/first.sh (中间都是有空格的)
  重定向与管道操作
  标准输入(STDIN):默认:键盘 文件编号为0
  标准输出(STDOUT):默认:显示器 文件编号为1
  标准错误(STDERR):默认:显示器 文件编号为2
  重定向输出>和>>分别是覆盖和追加重定向
  重定向输入<
  重定向输入可用于给用户创建密码
  [root@localhost~]#vim shelltest/useradd
  123456
  :x
  [root@localhost~]# passwd --stdin jerry 和2>>是覆盖和追加重定向
  当一个命令即包括错误输出和标准输出时可以用&>把标准和错误输出到一个文件里
  如自动编译安装httpd时要把make  make install操作全部指向/dev/null
  [root@localhost~]# vim httpd.sh
  #!/bin/bash
  #httpdshell install
  cd/var/ftp/pub/httpd-2.2.17/
  ./config--prefix=/usr/local/httpd --enable-so &>/dev/null
  make&>/dev/null
  makeinstall $>/dev/null
  .....以下省略
  执行这个脚本后编译安装时会把输出的文件全部指向/dev/null下。
  管道符“ | ”位于管道符左侧的命令输出的结果,将作为右侧命令的输入。
  如查看用“/bin/bash”作为shell的用户名称时可以用awk命令进一步过滤,只显示用户名和登录shell列
  过滤前会显示整行内容
  [root@localhost~]# grep "/bin/bash$" /etc/passwd
  root:x:0:0:root:/root:/bin/bash
  jerry:x:500:500::/home/jerry:/bin/bash
  过滤后只显示用户名和登录shell
  [root@localhost~]# grep "/bin/bash$" /etc/passwd | awk -F: '{print$1,$7}'
  root/bin/bash
  jerry/bin/bash
  上列中awk的作用是以:为分隔符输出第1列和第7列内容,-F是指定分隔符,可为文档中的任意字符,默认以空格或制表符分隔(大括号里的内容要用单引号)。
  使用shell变量
  常用的shell变量包括:自定义变量、环境变量、预定义变量、位置变量。
  自定义变量是由系统用户自己定义的变量,只在用户自己的shell环境中有效,所以又称做本地变量。
  定义变量的基本格式为“变量名=变量值”,等号两边没有空格。变量名称需要以字母或下划线开头,名称中不要包含特殊字符。
  自定义变量如下:
  [root@localhost ~]# system=centos
  [root@localhost ~]# version=6.5
  查看时用echo回显,变量名前要加上$符号
  [root@localhost ~]# echo $system
  centos
  [root@localhost ~]# echo $system $version
  centos 6.5
  回显变量名时如果后边有其它字符需要添加大括号“{}”将其包围起来,否则将无法确定正确的变量名称。未定义的变量,将显示为空值。
  [root@localhost ~]# echo $system6.5         #因未定义$system6所以只显示.5变量值为空
  .5
  [root@localhost ~]# echo ${system}6.5
  centos6.5
  变量赋值的特殊操作
  在等号后边直接指定变量内容是为变量赋值的最基本方法,除此以外还有一些特殊的赋值操作,可以灵活地赋值变量,以便适用于复杂的管理任务。
  1.双引号(“”)
  比如我们在赋值一个内容里包含空格时,必须用双引号括起来,如下
  [root@localhost ~]# Centos=Centos6.5  错误的赋值提示没有这个命令
  -bash: 6.5: command not found
  [root@localhost ~]#Centos="Centos 6.5"
  [root@localhost ~]# echo $Centos
  Centos 6.5
  2.($)符号
  在双引号范围内,使用“$”符号可以引用其它变量的值,如下
  [root@localhost ~]# redhat="red hat$version"
  [root@localhost ~]# echo $redhat
  red hat 6.5
  3.单引号(’)
  当要赋值的内容中包含$、“、\等具有特殊含义的字符时,应使用单引号括起来,经单引号的范围内,将无法引用其他变量值,任何字符当做普通字符看待,但赋值的内容中包含单引号时,需要用“\”符号进行转义,以免冲突。如下
  [root@localhost ~]# redhat='red hat $version'
  [root@localhost ~]# echo $redhat
  red hat $version
  4.反撇号(`)
  反撇号主要用于命令替换,允许将执行某个命令的屏幕输出结果赋值给变量,反撇号括起来的范围内必须是能够执行的命令行,否则会出错。如下
  [root@localhost ~]# ls -ld `which service`
  -rwxr-xr-x 1 root root 1744 2009-07-13/sbin/service
  如上述命令相当于先执行which service然后查看文件属性相当于连续执行了两条命令。
  但是使用反撇号不能在一行命令中实现嵌套命令替换操作,这时可以用“$()”来代替反撇号,以解决嵌套问题,如查看useradd命令程序的软件包安装的配置文件在什么位置,如下
  [root@localhost ~]# rpm -qc $(rpm -qf $(whichuseradd))
  /etc/default/useradd
  /etc/login.defs
  5.read命令
  Read命令是用来提示用户输入信息,从而实现简单的交互过程,将用户输入的内容赋值给指定的变量,多余的内容赋值给最后一个变量,若指定的变量只有一个,则将整行内容赋值给此变量。如下操作会等待用户输入,并将用户输入内容赋值给变量
  [root@localhost ~]# read dir
  /opt/backup
  [root@localhost ~]# echo $dir
  /opt/backup
  Read命令还可以结合”-p”选项来设置提示信息,如下
  [root@localhost ~]# read -p "请指定备份的存放目录:" dir
  请指定备份的存放目录:/opt/backup/
  [root@localhost ~]# echo $dir
  /opt/backup/
  之前说过自定义变量都只能在自己的shell里才能用称为局部变量,其实我们可以把局部变量变为全局变量。如下。
  [root@localhost ~]# echo "$system$version"
  centos 6.5
  [root@localhost ~]# export system version   #设置为全局变量
  [root@localhost ~]# bash                 #进入子shell环境
  [root@localhost ~]# echo "$system$version"
  centos 6.5
  export也可以在创建变量时直接创建为全局变量如下
  [root@localhost ~]# exportfqnd="www.baidu.com"
  [root@localhost ~]# bash
  [root@localhost ~]# echo $fqnd
  www.baidu.com
  5.数值变量运算
  Expr用于shell里简单的整数运算
  运算符与变量之间至少要有一个空格。
  expr 变量1 运算符变量2 [运算符变量3]……
  运算符包括以下几种
  +:加法                     -:减法          \*:乘法       /:除法         %:取余运算
  如x=5 y=3
  [root@localhost ~]# x=5
  [root@localhost ~]# y=3
  [root@localhost ~]# expr        $x    %       $y
  2
  特殊变量之环境变量
  环境变量指的是出于运行需要由linux系统提前创建的一类变量,主要用于设置用户的工作环境,如宿主目录,命令查找路径,用户当前目录等。使用env可以查看当前工作环境下的环境变量。
  [root@localhost ~]# env |more
  HOSTNAME=localhost.localdomain
  version=6.5
  TERM=linux
  SHELL=/bin/bash
  HISTSIZE=200
  KDE_NO_IPV6=1
  ……………..省略
  PATH是用于设置可执行程序的默认搜索路径。如first.sh在/root/下可用PATH添加,如下
  [root@localhost ~]#PATH="$PATH:/root"
  [root@localhost ~]# echo $PATH
  /usr/lib/qt-3.3/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/root
  在Linux中环境变量的全局配置文件在/etc/profile,在此文件中定义的变量作用于所有用户,而每个用户还有自己独立的配置文件(~/.bash_profile),如变更历史命令由1000改为20,
  [root@localhost ~]#vim /etc/profile
  ……//省略
  HISTSIZE=20
  [root@localhost ~]# source /etc/profile          使其配置生效
  [root@localhost ~]# history |wc –l
  20
  特殊变量之位置变量
  位置变量当执行命令脚本时,第一个字段表示命令名或脚本名,其余字符串参数从左至右的顺序依次赋值给位置变量,如下
  [root@localhost ~]# vi export.sh
  #!/bin/bash
  ########位置变量运算脚本#######
  SUM=`expr $1 \* $2`
  echo "$1 \* $2 = $SUM"
  [root@localhost ~]# sh expr.sh 5 6
  5 \* 6 = 30
  特殊变量之预定义变量
  预定义变量是程序以经定义好的变量,用户不能手动创建也不能直接赋值给预定义变量
  常见预定义变量
  $#:表示命令行中位置参数的个数
  $*:表示所有位置参数的内容
  $?:表示上一条命令执行后的状态,返回0为正确其它值均为异常
  $0:表示当前执行的脚本或程序名称


运维网声明 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-558265-1-1.html 上篇帖子: shell学习3-名称 通配符 参数展开 引用 下篇帖子: shell中实现进度条效果
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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