1.6.常见的系统及变量
在系统中被预设的变量如下
变量 | 说明 |
PATH | 命令的搜索路径,以冒号作为分隔符 |
HOME | 用户的家目录的路径,是cd命令的默认参数 |
COLUMNS | 命令行编辑模式下可使用命令的长度 |
HISTFILE | 命令历史的文件路径 |
HISTFILESIZE | 命令历史中包含的最大行数 |
HISTSIZE | history命令输出的记录数 |
LOGNAME|USER | 当前用户的名字 |
SHELL | 当前使用的shel |
PWD | 当前的工作目录 |
PS1 | 命令行提示符变量 |
Note
PATH指定命令执行路径是非常有用如果我想在当前用户中可以用相对路径方式调用/mnt下的所有可执行文件
]# vim ~/.bash_profile
PATH=$PATH:/mnt
# source ~/.bash_profile
# echo $PATH
/root/.local/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/mnt
1.7.特殊变量定义方式1.7.1.用命令的执行结果定义变量
在执行命令时如果想让指定命令优先执行可以使用 $(cmd)或‘’
[rootalee ~l#echo your hostname is hostnameyour hostname is hostname
[root@lee ~l# echo your hostname is $(hostnameyour hostname is lee.easylee.org
[root@lee ~]# echo your hostname is hostnameyour hostname is lee.easylee.org
[root@lee ~l#My_Hostname=`hostname[root@lee ~l# mY_Hostname=$(hostnameroot@lee ~]# echo $My_Hostname $mY_Hostnamelee.easylee.org ee.easylee.org
1.7.2.传参变量
很多情况下,shel脚本需要接受用户的输入,根据用户的输入来执行不同的操作。从命令行传递给shell脚本的参数又称为叫做位置参数,shel脚本会根据参数的位置使用不同的位置参数变量读取他们的值
变量 | 说明 |
$# | 命令行的参数的个数 |
$0 | 当前脚本的名称 |
$n | 当前传递给脚本的第n个参数,比如$1表示脚本的第一个参数,$2表示脚本的第二个参. |
$* | 以“参数1 参数2 参数3”的形式返回所有参数的值 |
$@ | 以“参数1"“参数2"“参数3”的形式返回所有参数的值 |
]# vim test.sh
#!/bin/bash
echo'$#' is $#
echo '$O' is $#
echo '$1' is $#
echo '$2' is $#
echo '$3' is $#
echo '$@' is $
echo '$*' is $
]# sh test.sheasy linux ee
$# is 3
$0 is 3
$1 is easy
$2 is linux
$3 is lee
$@ is easy linux lee
$* is easy linux lee
Note
大家还可以试试$?和$$
$?表示上一条命令的退出值,0表示无任何问题,1-255 表示命令执行报错
$$ 表示当前进程的pid
[rootalee ~]# echo $$
46058
[root@lee ~]# pS
PID TTY TIMECMD
46058 pts/0 00:00:00 bash
46058 pts/0 00:00:00 pS
[root@lee ~]# echo $?
0
[rootalee ~# s haha
1s:cannot access 'haha': No such file or directory
[root@lee ~l# echo $?
2
1.7.3 交互式传参
利用read命令可以和脚本执行者进行交互传参示例:
交互赋值单个变量
[root@timinglee ~]# read A
he11o
[root@timinglee ~]# echo $A
he11o
交互赋值多个变量
[root@timinglee~]#read A B C
hello easylee inux
[root@timinglee ~]#echo $A $B $C
hello easylee linux
交互赋值数组
[root@timinglee ~]# read -a array
hello easylee linux
[root@timinglee ~]# echo ${array[*]}
hello easylee linux
[root@timinglee ~]# echo ${array[0]}
he11o
[root@timinglee ~]# echo ${array[1]}
easylee
[root@timinglee ~]# echo ${array[2]}
linux
交互赋值并显示提示符
[root@lee ~]# read -p"please input word: " WORD
Please input word: test
[root@lee ~# echo $WORD
test
隐藏赋值内容
[root@timinglee ~]#read -p"please input word:"-S WORDP
lease input word:[root@timinglee ~#echo $WORD
he11o
设置超时时间
[root@timinglee ~]#read-t5-p"please input word:" WORD
设置赋值长度
[root@timinglee ~]#read-n3-p"please input word: " WORD
指定录入结束符
[root@timinglee ~]# read -d"." a
123456.
-a读取的内容存入数组
-d 持续读取直到读入 DELIM 变量中的第一个字符,而不是换行符
-n/N 读取N个字符
-p指定提示信息,用于等待输入
-r不允许反斜杠转义任何字符
-s 从标准输入中读取密码而不在屏幕上显示输入的字符
-t设置读取输入的超时时间,单位为秒