shell基础之01(脚本规则,变量名定义规范、变量种类) |
您所在的位置:网站首页 › shell变量名的命名规范 › shell基础之01(脚本规则,变量名定义规范、变量种类) |
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 |