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