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

Shell编程初学

[复制链接]

尚未签到

发表于 2018-8-20 13:49:49 | 显示全部楼层 |阅读模式
  Shell 的历史:bsh  -àBourn Again Shell
  csh
  ksh
  bsh的特性:
  命令历史,别名,管道,重定向
  1.       交互是的执行命令;
  2.       编程环境 自动化的应用
  流程控制:顺序执行;选择执行;循环执行。
  静态语言,编译型语言;
  编译,链接,运行效率高
  动态语言,解释型语言(解释器ksh,bsh,csh);脚本语言,解释器不需要编译,可以直接运行;运行效率低,便于维护和修改。
  所以我们在进行脚本编写的时候,在第一行,必须指定使用哪一种解释器.
  在Linux上,开发大型的应用,需要借助Perl,Python.
  Perl:
  Python:完全面向对象,语法、段落缩进、代码结构清晰,易于维护,并且可以开发Web应用。
  #!/bin/bash
  变量:variable 变量是什么?    --命名内存空间
  如何引用变量的值?     $A
  对于计算机来讲,数值和字符有严格区别。
  变量类型直接决定占用多大内存空间,决定了存储的数据类型,在脚本中当作字符来存储。
  bash:
  本地变量(局部变量)  只对当前shell有效  可以使用set 来查看当前的本地变量,取消环境变量为unset
  环境变量  对shell,子shell都有效,登出系统之后,则环境变量就会无效.
  export= VARIABLE_NAME=Value  指定环境变量
  位置变量
  特殊变量($?)
  怎么命名变量:变量的名称只能包含字母,数字,下划线,却只能以字母下划线进行命名。
  注意:1.尽可能避开系统已用变量名
  2.编程风格要相同
  变量替换:echo $NAME
  “ ”,弱引用,变量替换会进行
  ‘’强引用,变量替换会禁止
  ` `  表示命令替换,把一个命令的执行结果直接传递给另外一个命令。
  显示所有环境变量
  #export 用于显示所有环境变量
  #printenv 用于显示系统所有的环境变量
  #set     用于查看环境变量与自定义变量
  SHELL,process,prompt  进程都是有父进程fork自身而来。我们打开的每一个命令都属于shell
  的子进程。
  本地变量:
  环境变量:
  变量类型:整数,字符,浮点,布尔型
  SHELL:(内部命令,外部命令)
  系统定义的环境变量:为了shell的自身运行,而配置的参数。
  #declare –x VARIABLE  声明一个环境变量
  -I  integer    定义个整型
  -a  array     定义数组
  #unset VARIABLE_NAME    在使用完变量之后,应该显示撤销。变量的生命周期是shell.
  全局配置文件:
  /etc/profile, /etc/profile.d/*, /etc/bashrc  (全局配置文件,profile.d/*肢解成片段,全局配置文件)
  个人配置文件:
  ~/.bash_profile, ~/.bashrc, ~/.bash_logout->用户退出时的配置文件,前两个是用户登录所启动的配置文件。
  SHELL启动的类型:
  交互式登录shell       用户通过控制台  su – 交互式
  非交互式登录shell     su  ;执行脚本的shell;在图形终端下打开的模拟shell.
  交互式登录:
  /etc/profile --> /etc/profile.d/* --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc
  非交互式登录:
  ~/.bashrc --> /etc/bashrc --> /etc/profile.d/*
  profile 类文件中定义什么:
  1、  设定环境变量        shell不管退出或者登录都有效的命令
  2、  运行一些命令        shell登录过程中运行的命令
  bashrc 类的文件定义:
  1、  本地变量
  2、  命令别名
  [root@station30 ~]# export
  declare -x CVS_RSH="ssh"
  declare -x DISPLAY="localhost:10.0"     显示处于何种终端1000表示屏幕号)
  declare -x G_BROKEN_FILENAMES="1"
  declare -x HISTSIZE="1000"            命令历史
  declare -x HOME="/root"              当前用户的家目录
  declare -x HOSTNAME="station30.example.com"      主机名称
  declare -x INPUTRC="/etc/inputrc"                  输入设备的配置文件
  declare -x LANG="en_US.UTF-8"                    语言和字符集 #local –a 显示当前系统上支持的字符集,可以通过编辑/etc/sysconfig/i18n定义字符集和我们使用的语言
  declare -x LESSOPEN="|/usr/bin/lesspipe.sh %s"
  declare -x LOGNAME="root"
  declare -x LS_COLORS="no=00:fi=00:di=00;34:ln=00;36:pi=40;33:so=00;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=00;32:*.cmd=00;32:*.exe=00;32:*.com=00;32:*.btm=00;32:*.bat=00;32:*.sh=00;32:*.csh=00;32:*.tar=00;31:*.tgz=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.zip=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.bz=00;31:*.tz=00;31:*.rpm=00;31:*.cpio=00;31:*.jpg=00;35:*.gif=00;35:*.bmp=00;35:*.xbm=00;35:*.xpm=00;35:*.png=00;35:*.tif=00;35:"
  declare -x MAIL="/var/spool/mail/root"
  declare -x OLDPWD
  declare -x PATH="/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin"  在shell中键入的命令对应的可执行搜索路径
  注:#export  PATH=$PATH:/root  #export PATH=$PATH:/usr/local/mysql/bin
  #export  PATH=/root:/$PATH
  我们亦可通过编辑环境变量来定义路径:
  vim /etc/profile 编辑之后对于当前shell不会立即生效。让shell 重读一下该文件。可以使用#echo $PATH 或者#source /etc/profile   #.  /etc/profile
  declare -x PWD="/root"
  declare -x SHELL="/bin/bash"      当前正在执行的shell
  declare -x SHLVL="1"
  declare -x SSH_ASKPASS="/usr/libexec/openssh/gnome-ssh-askpass"
  declare -x SSH_CLIENT="192.168.0.217 4678 22"
  declare -x SSH_CONNECTION="192.168.0.217 4678 172.16.31.1 22"
  declare -x SSH_TTY="/dev/pts/0"
  declare -x TERM="xterm"
  declare -x USER="root"
  basename 基名,该命令可以去除一个路径的基名。
  [root@station30 ~]# basename  /etc/sysconfig/i18n
  i18n   i18n即为基名
  命令别名:
  alias name='command'
  #alias grep=”grep –color=auto”
  unalias name
  bash 的登录与欢迎信息:
  可以编辑当前目录下的./bash_profile 我们可以在该文件中添加一些登录欢迎语句。
  登录界面的欢迎信息:            -----全局变量
  #vi /etc/issue
  在用户登录后所显示的信息        -----全局变量
  #vi /etc/motd
  脚本的执行方式:
  1.#chmod +x
  #./script_name
  2.#bash ./script
  #bash –n SHELL_FILE 分析shell 脚本是否有错误
  #bash –x SHELL_FILE 执行shell 脚本的过程
  命令一条条执行我们称之为顺序执行:
  选择:
  循环:
  for 遍历式循环
  for VAR in LIST;do
  statement1
  statement2
  …
  done
  如何定义列表:
  1、  简单列出
  2、  {1,..10}
  3、  `seq 1 10`
  4、  `cat /etc/passwd`  可以查看一個文件中的所有行,如果有空格被识别为两行 `ls /var` 命令替换的方式获取列表
  Practice 1:设置10个用户,并且设置的用户名是一样的。
  Practice2: 写一个脚本:
  1、设定变量FILE的值为/etc/passwd
  2、依次向/etc/passwd中的每个用户问好,并显示对方的shell,形如:  (提示:LINES=`wc -l /etc/passwd | cut -d" " -f1`)
  Hello, root, your shell: /bin/bash
  3、统计一共有多少个用户
  #!/bin/bash
  #
  FILE='/etc/passwd'
  LINES=`wc -l $FILE | cut -d' ' -f1`
  for LINE in `seq 1 $LINES`;do
  MYUSER=`head -$LINE $FILE |tail -1 |cut -d: -f1`
  MYSHELL=`head -$LINE $FILE |tail -1 |cut -d: -f7`
  echo "Hello,$MYUSER,Your shell:$MYSHELL"
  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.yunweiku.com/thread-554345-1-1.html 上篇帖子: Linux Shell简介 下篇帖子: bash编程:Shell练习题
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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