shell之-变量以及变量的使用方式
1 shell变量是什么?
用一个特定的字符串去表示不固定的内容
ip=www.baidu.com # 变量的命名必须以字符或者下划线开头,=号左右不能有空格 ping -c1 $ip #通过$ip来获取变量的值
2 Shell变量赋值
2.1 显式赋值
a=1
echo $a # 1
2.2 从控制台赋值
#!/bin/bash
# 从控制台输入一个字符串并赋值给ip
read -p "please enter a word you like: " ip
# 开始ping该ip
ping -c1 "$ip" &>/dev/null
# 看上一条命令是否执行成功,假如ping成功,那么就打印up
if [ $? -eq 0 ]; then
echo "ping $ip is success!~ $ip is up!"
else
echo "ping $ip is failed!~ $ip is down!"
fi
2.3 通过$n,通过执行脚本的时候传入参数值
# 这叫位置变量,位置变量不需要事先定义
$1 代表第一个变量
$2 代表第二个变量
...... ${10}
3 环境变量
在shell中,可以通过export命令的 的方式定义环境变量,环境变量是可以全局共用的,
可以通过env命令来查看所有的环境变量
,常见的环境变量有:$HOME$SHELL
U
S
E
R
USER
USERPWD
env # 查看环境变量
set # 查看所有配置
export ip=www.baidu.com
ip1=www.google.com
export ip1 # 将ip1转换成环境变量,在当前shell以及子shell中有效
# 普通变量只在当前shell中有效
echo ${ip1}
echo $ip1
echo ${#ip1} #显示字符串的长度
3.1 怎么通过不使用环境变量的方式使用其他shell脚本中的变量
# 创建一个shell
vim bash.sh
#!/bin/bash
base=/opt
base1=/usr/local
#创建另外一个变量
vim a1.sh
#!/bin/bash
# 通过source base.sh 或者 . base.sh
. base.sh # .与base.sh 中间必须有制表符
echo $base
echo $base1
4 $? $! $# $* $$ $@ 一般可以用在if [] fi判断中或者while中
$? 代表上个命令的执行结果
$! 代表上一个后台进程的进程id pid #仅支持后台进程
$# 代表参数的个数
$$ 当前进程的pid
$* 所有参数
$@ 所有参数
$1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} #分别代表传入脚本的参数,第N个参数
$0 代表当前脚本的名字(全路径)
# 查看脚本内容
cat vals.sh
echo '第一个参数是:' $1
echo '第三个参数:'$3
echo '$# = ' $#
echo '$* = '$*
echo '$@ = '$@
echo '$$' = $$
# 执行脚本,查看执行结果
bash vals.sh 1 2 3 4 5
第一个参数是: 1
第三个参数:3
$# = 5
$* = 1 2 3 4 5
$@ = 1 2 3 4 5
$$ = 67961
5 文件名 basename
目录名dirname
cd /Users/shufang/shell_practice
basename $PWD # shell_practice,显示末尾的文件夹或者文件名称
dirname $PWD # /Users/shufang/shell_practice 显示全路径名称