shell基础之01(脚本规则,变量名定义规范、变量种类)

您所在的位置:网站首页 shell变量名的命名规范 shell基础之01(脚本规则,变量名定义规范、变量种类)

shell基础之01(脚本规则,变量名定义规范、变量种类)

2024-07-10 22:49| 来源: 网络整理| 查看: 265

1、[root@room4pc09 桌面]# cat /etc/shells  ------------------查看所有的shell解释器 /bin/sh /bin/bash /sbin/nologin /usr/bin/sh /usr/bin/bash /usr/sbin/nologin /bin/tcsh /bin/csh    2、清空已记录的历史命令。  [root@svr5 ~]# history -c   ----------清空自己的历史命令  [root@svr5 ~]# > ~/.bash_history  --------清空记录文件  [root@svr5 ~]# history   ----------再次检查历史命令列表             3、一定要清楚自己写的脚本是交互还是非交互的!!  交互 需要自己确认  

Ctrl+A  跳到命令行开头 Ctrl+E  跳到命令行结尾

4、写脚本步骤: bash test.sh 1.新建文件,扩展名最好是sh 2.写内容  第一行必须是#!/bin/bash    下面的所有 指令都在/bin/bash下——指定解释器  #都不会被执行,是注释信息 3. 添加执行权限 chomod +x test.sh    5、无权限的脚本        bash   文件名   会开启子进程(子进程执行) 执行完,自动退出     source 文件名   不会开启子进程 (当前执行)     eg:同时开启两个窗口            写脚本,sleep 100        (1)bash test.sh 或 source test.sh     另一个窗口执行:pstree         (2)bash text.sh   脚本写exit      sshd--bash--bash--exit             source test.sh       sshd--bash--exit echo $a   6、Shell脚本的执行方式:   方法一,作为“命令字”:指定脚本文件的路径,前提是有 x 权限       [root@svr5 ~]# ./first.sh    --------指定相对路径     [root@svr5 ~]# /root/first.sh-------------指定绝对路径   方法二,作为“参数”:使用bash、sh、source或者点号 . 来加载脚本文件       [root@svr5 ~]# bash   first.sh   --------开启子进程     [root@svr5 ~]# sh        first.sh   ------------开启子进程     [root@svr5 ~]# source first.sh     -----------不开启子进程     [root@svr5 ~]# .        first.sh         --------------不开启子进程       8、自己搭建yum源,file,ftp,http mount -o loop 光盘.iso  /var/ftp/pub   1)#!/bin/bash-------------------搭建yum源 rm -rf /etc/yum.repo.d/* echo "[abc] name=added from: http://192. 168.4.254/rh7dvd baseurl=http://192.168.4.254/rh7dvd enabled=1 gpgcheck=0" > /etc/yum.repo.d/abc.repo yum clean all yum repolist   2)#!/bin/bash---------另一种搭建yum源的方法 rm -rf /etc/etc/yum.repo.d/* yum-config-manager .... echo "gpgcheck=0" >> yum仓库配置文件 yum clean all yum repolist     9、变量名=变量值 注意:1.等号两边不能有空格 2.变量名【字母,数字,下划线_,不能包含特殊符号,不能以数字开头】 3.如变量名已经存在,同名变量会被覆盖   调用变量 $名称 a=1 echo ${a}RMB  相当于(1+2)*2  有歧义就加个{}   10、SHEEL 弱类型的脚本语言   env  列出所有的环境变量 set  包含所有的变量  使用set可查看所有变量(包括env能看到的环境变量)   系统自带的都是大写的   PS1 定义的是命令提示符 PS2 二级提示符   11、vim test.shecho $0  文件名字 echo $1  第一个参数 echo $2  第二个参数 echo $3  第三个参数   echo $*  所有的参数 echo $#  已加载位置变量个数 echo $?  上一个程序的是否成功   12、写一个脚本,根据用户需求,来自动创建用户密码 #!/bin/bash useradd $1 echo "$2" | passwd --stdin $1     $0 $1 $2 $*  $#  系统默认 echo $? 上一个命令是否成功  (0表示成功,1或其他值表示失败)   13、$$  当前进程的进程号   14、变量(自定义,系统) keyname=value   1.系统自带 HOME PATH USER PWD UID     $0  $1  $2  $3 ....  $*  $#  $?     2.使用环境变量   当前用户的环境变量USER记录了用户名、LOGNAME记录了登录名、HOME记录了宿主目录、SHELL记录了登录Shell、HOSTNAME记录主机名、TERM记录终端类型:       [root@svr5 ~]# echo $USER $LOGNAME $HOME $SHELL     root root /root /bin/bash     [root@svr5 ~]# echo $HOSTNAME     svr5.tarena.com     [root@svr5 ~]# echo $TERM     xterm   环境变量PS1表示Shell环境的一级提示符,即命令行提示符(\u 用户名、\h 主机名、\W 工作目录、\$ 权限标识):       [root@svr5 src]# echo $PS1    ------------查看默认的一级提示     [\u@\h \W]\$     [root@svr5 src]#PS1='bash-3.2\$'    -----------修改一级提示     bash-3.2#          -----------------更改结果     bash-3.2#PS1='[\u@\h \W]\$ '    -----------恢复原有设置   环境变量PS2表示二级提示符,出现在强制换行、at任务编辑等场合:       [root@svr5 ~]# echo $PS2  -------------查看默认的二级提示     >     [root@svr5 src]# cd \         ---------强制换行,观察提示符效果     > /root/     [root@svr5 ~]# PS2='=> '      --------手动修改二级提示     [root@svr5 ~]# cd \    -------------再次验证提示符效果     => ~     [root@svr5 ~]# PS2='> '   -----------恢复原有设置     \d :代表日期,格式为weekday month date,例如:"Mon Aug 1" \H :完整的主机名称。例如:我的机器名称为:fc4.linux,则这个名称就是fc4.linux \h :仅取主机的第一个名字,如上例,则为fc4,.linux则被省略 \t :显示时间为24小时格式,如:HH:MM:SS \T :显示时间为12小时格式 \A :显示时间为24小时格式:HH:MM \u :当前用户的账号名称 \v :BASH的版本信息 \w :完整的工作目录名称。家目录会以 ~代替 \W :利用basename取得工作目录名称,所以只会列出最后一个目录 \# :下达的第几个命令 \$ :提示字符,如果是root时,提示符为:# ,普通用户则为:$

中英文转换 LANG=zh_CN.UTF-8     15、案例4:变量的扩展应用 4.1 问题   本案例要求进一步熟悉Shell变量的赋值控制,主要练习或验证下列内容:  

    三种引号对赋值的影响    使用read命令从键盘读取变量值    使用export发布全局变量

4.2 步骤   实现此案例需要按照如下步骤进行。   步骤一:三种引号对变量赋值的影响   1)双引号的应用   使用双引号可以界定一个完整字符串。       [root@svr5 ~]# SCHOOL=Tarena IT Group     -bash: IT: command not found         -----------未界定时赋值失败     [root@svr5 ~]# SCHOOL="Tarena IT Grou------------界定后成功     [root@svr5 ~]# touch aa bb ------------创建了两个文件     [root@svr5 ~]# touch "aa bb"     -----------创建了一个文件     [root@svr5 ~]# ll-----------------查看结果   2)单引号的应用   界定一个完整的字符串,并且可以实现屏蔽特殊符号的功能。       [root@svr5 ~]# NOTE='当前的用户是:$USER'     [root@svr5 ~]# echo $NOTE     当前的用户是:$USE---------------单引号内的 $ 被视为普通字符   3)反撇号或$()的应用   使用反撇号或$()时,可以将命令执行的标准输出作为字符串存储,因此称为命令替换。       [root@svr5 ~]# tar -czf log-`date +%Y%m%d`.tar.gz /var/log

\  把它右边的符号屏蔽掉

范例: [root@localhost test]# a=12 [root@localhost test]# echo "\$a RMB" $a RMB [root@localhost test]# echo "\$a $a $a $a" $a 12 12 12  

[root@localhost ~]# mkdir test [root@localhost ~]# cd test [root@localhost test]# touch "a b c"--------创建一个叫a b  c的文件 [root@localhost test]# ls a b c [root@localhost test]# rm -rf a b c--------删除a文件 b文件 c文件,因为没有所以什么都没有删除 [root@localhost test]# ls a b c [root@localhost test]# rm -rf "a b c" [root@localhost test]# ls

  步骤二:使用read命令从键盘读取变量值   1)read基本用法   执行后从会等待并接受用户输入(无任何提示的情况),并赋值给变量str:       [root@svr5 ~]# read str     What's happen ?------------------随便输入一些文字,按Enter键提交     [root@svr5 ~]# echo $str  -----------------查看赋值结果     What's happen ?  为了不至于使用户不知所措、莫名其妙,推荐的做法是结合-p选项给出友好提示:       [root@svr5 ~]# read -p "请输入一个整数:" i     请输入一个整数:240     [root@svr5 ~]# echo $i     240   2)stty终端显示控制   将回显功能关闭(stty -echo), 将回显功能恢复(stty echo)。   可参考下列操作创建一个测试脚本:       [root@svr5 ~]# vim sttyecho.sh    ------创建一个测试脚本     #!/bin/bash     read -p "localhost login: " USERNAME--------读取用户名     stty -echo  ---------------关闭回显       read -p "Password: " PASSWORD     -------------读取密码     stty echo -----------------恢复回显     echo "" -------------恢复回显后补一个空行     echo "Your login name is: $USERNAME"  ---------确认赋值结果     echo "Your password is: $PASSWORD"----------确认赋值结果     [root@svr5 ~]# chmod +x sttyecho.sh          //添加执行权限   执行测试脚本sttyecho.sh,验证效果:       [root@svr5 ~]# ./sttyecho.sh     localhost login: root           --------------输入root,回车     Password:     --------------输入1234567(不会显示),回车     Your login name is: root        ------------脚本反馈结果     Your password is: 1234567   步骤三:使用export发布全局变量   默认情况下,自定义的变量为局部变量,只在当前Shell环境中有效,而在子Shell环境中无法直接使用。比如已定义的SCHOOL变量,当进入到sh或bash子Shell后,变量SCHOOL将处于未定义的状态:       [root@svr5 ~]# echo $SCHOOL      IT Group     [root@svr5 ~]# sh --------------------开启一个sh子进程     sh-3.2# echo $SCHOOL      ------------查看SCHOOL变量值无结果     sh-3.2# exit  ------------返回原有Shell环境     exit     [root@svr5 ~]# bash     -----------开启bash子进程     [root@svr5 ~]# echo $SCHOOL      -----------查看SCHOOL变量值无结果     [root@svr5 ~]# exit----------返回原有Shell环境     exit     若希望定义的变量能被子进程使用,可以使用export命令将其发布为全局变量。使用export发布时,只需指定变量名(可以有多个)即可,也可以通过export命令直接设置新的全局变量:       [root@svr5 ~]# export SCHOOL    -------发布已定义的变量     [root@svr5 ~]# export XX="1234"-----------发布新变量     [root@svr5 ~]# NSD="Network&System Direction"     [root@svr5 ~]# export NSD YY="5678"-----------混合式发布   验证刚刚发布的全局变量:       [root@svr5 ~]# sh   ---------进入sh子Shell环境     sh-3.2# echo $SCHOOL        ---------------查看全局变量的值 .. ..

    IT Group     sh-3.2# echo $NSD     Network&System Direction     sh-3.2# echo $XX $YY     1234 5678     sh-3.2# exit   -----------------返回原有Shell环境     exit     [root@svr5 ~]#   若要取消全局变量的全局属性,可结合export命令的 -n 选项;若要取消变量,则应使用unset命令。比如,以下操作可将前面发布的SCHOOL、XX恢复成局部变量:       [root@svr5 ~]# export -n SCHOOL XX   -----------取消全局变量属性     [root@svr5 ~]# echo $SCHOOL $XX  -----------局部变量SCHOOL、XX仍可用     Tarena IT Group 1234     [root@svr5 ~]# sh     sh-3.2# echo $SCHOOL $XX -------------全局变量SCHOOL、XX已不可用     sh-3.2# exit   -------------返回原有Shell环境     exit     [root@svr5 ~]#      



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3