1·Shell编程变量

1)什么是变量?内存单元,其值可以改变
变量命名规则

1.开头为字符或下划线,名字中间中能有字母、数字和下划线组成;
2.变量的长度不超过255个字符;
3.变量名在有效的范围内必须是唯一的; //如再次定义则会替换上一个变量的值
4.在Bash中,变量的默认类型都是字符串型. //即系统把所有值都当作字符串放到变量中,不论这个“字符串”实际上是整数、浮点数等等

变量按照存储数据常用分类(其他语言):字符串型,整型,浮点型,日期型

2)变量的分类
1.用户自定义变量 :可以随意更改
2.环境变量:部分可以更改
3.位置参数变量 //实际就是预定义变量 :系统已经定义完成,不能随意更改
4.预定义变量:系统已经定义完成,不能随意更改

3)如何设置用户自定义变量

1、变量名=变量值 
e.g. x=5 注意,变量名只能是字母、下划线、数字组成且不能以数字开头,=号左右不可有空格
2、“”会解析特殊符号,例如$,‘’不会解析特殊符号
3、引用变量:$变量名  例如:$x 
4、所有变量默认的值都是字符串类型,不可做Math运算
5、变量叠加 e.g  y="$x"123  或者 y=${x}123 
6、查看变量 set 会列出系统中所有的变量,包括环境变量和自定义变量
   set -u //设定当调用不存在变量时,会提示错误
7、删除变量 unset 变量名 例如:unset x

4)环境变量
1.环境变量与用户自定义变量的区别
环境变量是全局变量,用户自定义变量是局部变量。
用户自定义变量只在当前的 shell 中生效,环境变量在当前 shell 和这个 shell 的所有子 shell 中生效。
用户可以自定义环境变量,但对系统生效的环境变量名和变量作用是固定的。

2.用户自定义环境变量
$ export 变量名=变量值
或
$ 变量名=变量值
$ export 变量名

3.查看环境变量
$ set 查看所有变量
$ env 查看环境变量

4.删除环境变量
$ unset 环境名

5.常用的环境变量
HOSTNAME:主机名
SHELL:当前的 shell
TERM:终端环境
HISTSIZE:历史命令条数
SSH_CLIENT:当前操作环境是用 ssh 连接的,这里记录客户端 ip
SSH_TTY:ssh 连接的终端是 pts/1
USER:当前登录的用户
PATH:系统搜索命令的路径

要想直接通过脚本名执行自己的脚本:
(1)将脚本拷贝至 PATH 中的任意目录下(不建议这样做),例如:
$ cp hello.sh /bin/
(2)将脚本所在目录添加到 PATH 变量中,例如:
$ PATH="$PATH":/root/sh 但系统重启后失效
PS1:命令提示符设置
\d:显示日期,格式为"星期 月 日"
\H:显示完整的主机名
\t:显示 24 小时制时间,格式为"HH:MM:SS"
\A:显示 24 小时制时间,格式为"HH:MM"
\u:显示当前用户名
\w:显示当前所在目录的完整名称
\W:显示当前所在目录的最后一个目录
\$:提示符。root 用户为"#",普通用户为"$"

5)语系变量
就是当前支持的语言

当前语系查询:locale        //直接生效的是LANG变量(默认语系)  LC_ALL:定义整体语系(不常用)

echo $LANG    //当前语系环境
echo $LC_ALL  //整体语系环境

locale -a | more 查看Linux支持的所有语系环境

cat /etc/sysconfig/i18n  //下次开机以后的系统环境

LANG=zh_CN.UTF-8  //切换成中文

6)位置参数变量
1.位置参数变量
nn 0 代表命令本身, 1 9 代表第一到第九个参数,十以上的参数需要用大括号包含,如 10 *:这个变量代表命令行中所有的参数, @:这个变量也代表命令行中所有的参数,不过 @ #:这个变量代表命令行中所有参数的个数。

2.例子1:

#!/bin/bash
num1=$1
num2=$2
sum=$(($num1+$num2)) 
#变量 sum 的和是 num1 加 num2
echo $sum 
#打印变量 sum 的值

3.例子2

#!/bin/bash
echo "A total of $# parameters"
使用 $# 代表所有参数的个数
echo "The parameters is:$*"
使用 $* 代表所有的参数
echo "The parameters is:$@"
使用 $@ 代表所有的参数
4.例子3:$* 与 $@ 的区别
#!/bin/bash
for i in "$*"
# $* 中所有参数看成是一个整体,所以这个 for 循环只会循环一次
do
  echo "The parameters is:$i"
done

for y in "$@"
# $@ 中每个参数都看成是独立的,所以 $@ 中有几个参数,就会循环几次
do
  echo "Parameter:$y"
done

7)预定义变量

程序执行的返回值:

$? :最后一次执行命令的返回状态,如果正确执行,则返回0;
            如果返回为非零(具体数值由命令决定),则上一条命令执行不正确


执行完一条命令之后,立马敲入echo $?,可得到返回值。例如:ls   执行之后,再敲入echo $?,可以得到0

前门说到的逻辑或:|| -->ls  ||  echo yes ;前面一条语句正确执行,才执行后一条语句。这里就是通过执行命令的返回值来判断的
    逻辑与:&& -->  ls qwe  && echo no  也是同样的道理

$$:返回当前进程的PID号;
$!:返回后台的进程PID号;

可以通过一个简单的shell来展示一下:
sl.sh
#!/bin/bash
ehco "dang qian de PID: $$"

find / hello.sh &
echo "hou tai de PID: $!"

chmod 755 sl.sh,然后再执行:./sl.sh;可以得到当前的测试的结果

read -n
read -p “please input name ” name #-p表示输出提示信息 read [选项] 变量名
read -t 30 #-t 表示等待时间单位为秒 -t 30 表示30秒,若30秒后没有输入数据终止执行脚本
read -s #隐藏信息
echo -e “\n” 换行符

read.sh:
    #!/bin/bash
    read -p "please input your name:" -t 30 name
    #等下输入,如果超过30秒不输入,就终止当前命令
    echo $name

    read -p "please input your password:" -s  pwd
    #输入的值是隐藏的,看不见的,但是在sh里面还是可以获取到的,并且输出的
    echo -e "/n"
    echo $pwd

    read -p "please input your sex [M/F]:" -n 1 sex
    #意思就是只能输入一个字符,且输入之后立马执行
    echo -e "/n"
    echo  $sex
chmod 755 read.sh---> ./read.sh
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值