了解Linux中shell变量

#####Linux下查看shell的类别:cat /etc/shellsimage.png
#⚪bash
------大多数Linux系统默认使用的Shell,bash Shell是Bourne Shell 的一个免费版本,它是最早的Unix Shell,bash 还有一个特点,可以通过help命令 来查看帮助。包含的功能几乎可以涵盖Shell所具有的功能,所以一般的Shell脚本都会指定它为执行路径

#一.bash的初始化
#####1、/etc/profile
全局(公有)配置,不管是哪个用户,登录时都会读取该文件。
#####2、/ect/bashrc
Ubuntu 没有此文件,与之对应的是 /ect/bash.bashrc 它也是全局(公有)的 bash 执行时,不管是何种方式,都会读取此文件。
#####3、~/.profile
若 bash 是以 login 方式执行时,读取 ~/.bash_profile,若它不存在,则读取 ~/.bash_login,若前两者不存 在,读取~/.profile。 图形模式登录时,此文件将被读取,即使存在 ~/.bash_profile 和 ~/.bash_login。
#####4、~/.bash_login
若 bash 是以 login 方式执行时,读取 ~/.bash_profile,若它不存在,则读取 ~/.bash_login,若前两者不存 在,读取 ~/.profile。
#####5、~/.bash_profile
Unbutu 默认没有此文件,可新建。 只有 bash 是以 login 形式执行时,才会读取此文件。通常该配置文件还会配置成去读取 ~/.bashrc。
#####6、~/.bashrc
当 bash 是以 non-login 形式执行时,读取此文件。若是以 login 形式执行,则不会读取此文件。
#####7、~/.bash_logout
注销时,且是 longin 形式,此文件才会读取。在文本模式注销时,此文件会被读取,图形模式注销时,此文 件不会被读取。
#二.bash的特性
####1.命令和文件自动补齐
----Linux命令自动补全需要安装bash-completion
image.png
----安装后重启系统可正常tab补齐
####2.命令历史记忆功能

1.查看之前使用过的所有命令:history
2.显示最近的n个命令:history n
3.删除相应的第n个命令:history -d n
4.指定执行命令历史中的第n条语句:!n
5.指定执行命令历史中倒数第n条语句:!-n
6.执行命令历史中最后一条语句:!!
7.执行命令历史中最近一条以[String]开头的语句:![String]
8.引用上一个命令中的最后一个参数:!$
----COMMAND + Esc键 + . 输入COMMAND之后,按下Esc键,松开后再按 . 则可以自动输入最近一条语句使用的参数 
----COMMAND + Alt + . 输入COMMAND之后,同时按下Alt和. 键,也可以自动输入最近一条语句使用的参数
9.将历史命令写入命令历史的文件中:history -w
10.回显 echo 之后的语句,而使用 echo $FILENAME 命令可以查看该 file 所在的路径:echo $HISTFILE
11.查看命令历史的内容: cat .bash_history
12.删除所有的命令历史记录:history -c

####3.别名功能

1.查看系统当前所有的别名:alias
2.定义新的别名,输入h5就相当于'head-5'
3.取消定义的别名:unalias h5

####4.常用的快捷键
----ctrl +A:把光标移动到命令行开头。如果我们输入的命令过长,想要把光标移动到命令行开头时使用。
----ctrl +E:把光标移动到命令行结尾
----ctrl +C:强制终止当前的命令
#二.shell 变量
#####1.含义:
用一个固定的字符串去表示不固定的内容

#####2.变量的类型:
自义环境变量:

  1. 方法一 export back_dir2=/home/backup
  2. 方法二 export back_dir1 将自定义变量转换成环境变量
    引用环境变量:变 量 名 或 {变量名}
    查看环境变量:echo $变量名 env 例如 env | grep back_dir2
    取消环境变量:unset 变量名
    变量作用范围:在当前Shell和子
  3. 位置变量
    $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10}
  4. 预定义变量
    $0 脚本名
    $* 所有的参数
    $@ 所有的参数
    $# 参数的个数
    $$ 当前进程的PID
    $! 上一个后台进程的PID
    $? 上一个命令的返回值 0表示成功
    #####3.*和@的区别
# vim ping.sh 
#!/bin/bash 
ping ‐c2 $1 &>/dev/null 
if [ $? = 0 ];then 
echo "host $1 is ok" 
else
echo "host $1 is fail" 
fi
[root@qfdeu ~]# chmod a+x ping.sh 
[root@qfdeu ~]# ./ping.sh 192.168.2.25

#####4.变量的赋值方式
######①显式赋值
变量名=变量值

ip1=192.168.1.251
school="BeiJing 1000phone"
today1=`date +%F`
today2=$(date +%F)

######②read从键盘读入变量值
read 变量名
read -p "提示信息: " 变量名
read -t 5 -p "提示信息: " 变量名
• -t 后面跟秒数,定义输入字符的等待时间
read -n 2 变量名
• -n 后跟一个数字,定义输入文本的长度,很实用。

[root@qfdeu ~]# vim first.sh
back_dir1=/var/backup
read ‐p "请输入你的备份目录: " 
back_dir2 echo $back_dir1 echo 
$back_dir2 [root@qfdeu ~]# sh first.sh
[root@qfdeu ~]# vim ping2.sh 
#!/bin/bash
 read ‐p "Input IP: " ip
 ping ‐c2 $ip &>/dev/null
 if [ $? = 0 ];then 
echo "host $ip is ok" 
else
echo "host $ip is fail" 
fi
[root@qfdeu ~]# chmod a+x ping2.sh 
[root@qfdeu ~]# ./ping.sh

#####5.定义引用变量
----"" 弱引用
----’’ 强引用

[root@qfdeu ~]# school=1000phone 
[root@qfdeu ~]# echo "${school} is good" 
1000phone is good
 [root@qfdeu ~]# echo '${school} is good' 
${school} is good

----(反引号)命令替换 等价于 $() 反引号中的Shell命令会被先执行

[root@qfdeu ~]# touch `date +%F`_file1.txt 
[root@qfdeu ~]# touch $(date +%F)_file2.txt 
[root@qfdeu ~]# disk_free3="df ‐Ph |grep '/$' |awk '{print $4}'" # 错误 
[root@qfdeu ~]# disk_free4=$(df ‐Ph |grep '/$' |awk '{print $4}') 
[root@qfdeu ~]# disk_free5=`df ‐Ph |grep '/$' |awk '{print $4}'`

#####6.变量"内容"的删除和替换
######①"内容"的删除

[root@qfedu ~]# url=www.sina.com.cn
 [root@qfedu ~]# echo ${#url} # 获取变量值的长度 
15
[root@qfedu ~]# echo ${url} # 标准查看 www.sina.com.cn 
[root@qfedu ~]# echo ${url#*.} # 从前往后,最短匹配 
sina.com.cn 
[root@qfedu ~]# echo ${url##*.} # 从前往后,最长匹配 贪婪匹配 
cn
[root@qfedu ~]# url=www.sina.com.cn 
[root@qfedu ~]# echo ${url} www.sina.com.cn 
[root@qfedu ~]# echo ${url%.*} # 从后往前,最短匹配 
www.sina.com 
[root@qfedu ~]# echo ${url%%.*} # 从后往前,最长匹配 贪婪匹配 
www 
[root@qfedu ~]# url=www.sina.com.cn 
[root@qfedu ~]# echo ${url#a.}
www.sina.com.cn 
[root@qfedu ~]# echo ${url#*sina.} com.cn
[root@qfedu ~]# echo $HOSTNAME qfedu.1000phone.com 
[root@qfedu ~]# echo ${HOSTNAME%%.*} 
qfedu

######②"内容"的替换

[root@qfedu ~]# url=www.sina.com.cn
[root@qfedu ~]# echo ${url/sina/baidu}
www.baidu.com.cn 
[root@qfedu ~]# url=www.sina.com.cn 
[root@qfedu ~]# echo ${url/n/N}
 www.siNa.com.cn 
[root@qfedu ~]# echo ${url//n/N} 贪婪匹配 
www.siNa.com.cN

######③变量的替代

[root@qfedu ~]# unset var1
[root@qfedu ~]# 
[root@qfedu ~]# echo ${var1} 
[root@qfedu ~]# echo ${var1‐aaaaa}
 aaaaa 
[root@qfedu ~]# var2=111 
[root@qfedu ~]# echo ${var2‐bbbbb}#####Linux下查看shell的类别:cat /etc/shells![image.png](https://upload-images.jianshu.io/upload_images/24318310-653bdee7f795a9a2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
#⚪bash
------大多数Linux系统默认使用的Shell,bash Shell是Bourne Shell 的一个免费版本,它是最早的Unix Shell,bash 还有一个特点,可以通过help命令 来查看帮助。包含的功能几乎可以涵盖Shell所具有的功能,所以一般的Shell脚本都会指定它为执行路径


#一.bash的初始化
#####1、/etc/profile
 全局(公有)配置,不管是哪个用户,登录时都会读取该文件。
 #####2、/ect/bashrc
Ubuntu 没有此文件,与之对应的是 /ect/bash.bashrc 它也是全局(公有)的 bash 执行时,不管是何种方式,都会读取此文件。 
#####3、~/.profile 
若 bash 是以 login 方式执行时,读取 ~/.bash_profile,若它不存在,则读取 ~/.bash_login,若前两者不存 在,读取~/.profile。 图形模式登录时,此文件将被读取,即使存在 ~/.bash_profile 和 ~/.bash_login。 
#####4、~/.bash_login
 若 bash 是以 login 方式执行时,读取 ~/.bash_profile,若它不存在,则读取 ~/.bash_login,若前两者不存 在,读取 ~/.profile。
#####5、~/.bash_profile 
Unbutu 默认没有此文件,可新建。 只有 bash 是以 login 形式执行时,才会读取此文件。通常该配置文件还会配置成去读取 ~/.bashrc。 
#####6、~/.bashrc 
当 bash 是以 non-login 形式执行时,读取此文件。若是以 login 形式执行,则不会读取此文件。 
#####7、~/.bash_logout 
注销时,且是 longin 形式,此文件才会读取。在文本模式注销时,此文件会被读取,图形模式注销时,此文 件不会被读取。
#二.bash的特性
####1.命令和文件自动补齐
----Linux命令自动补全需要安装bash-completion
![image.png](https://upload-images.jianshu.io/upload_images/24318310-c0b68952e51d0fc7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
----安装后重启系统可正常tab补齐
####2.命令历史记忆功能

1.查看之前使用过的所有命令:history
2.显示最近的n个命令:history n
3.删除相应的第n个命令:history -d n
4.指定执行命令历史中的第n条语句:!n
5.指定执行命令历史中倒数第n条语句:!-n
6.执行命令历史中最后一条语句:!!
7.执行命令历史中最近一条以[String]开头的语句:![String]
8.引用上一个命令中的最后一个参数:!$
----COMMAND + Esc键 + . 输入COMMAND之后,按下Esc键,松开后再按 . 则可以自动输入最近一条语句使用的参数
----COMMAND + Alt + . 输入COMMAND之后,同时按下Alt和. 键,也可以自动输入最近一条语句使用的参数
9.将历史命令写入命令历史的文件中:history -w
10.回显 echo 之后的语句,而使用 echo $FILENAME 命令可以查看该 file 所在的路径:echo $HISTFILE
11.查看命令历史的内容: cat .bash_history
12.删除所有的命令历史记录:history -c

####3.别名功能

1.查看系统当前所有的别名:alias
2.定义新的别名,输入h5就相当于’head-5’
3.取消定义的别名:unalias h5

####4.常用的快捷键
----ctrl +A:把光标移动到命令行开头。如果我们输入的命令过长,想要把光标移动到命令行开头时使用。
----ctrl +E:把光标移动到命令行结尾
----ctrl +C:强制终止当前的命令
#二.shell 变量
#####1.含义:
用一个固定的字符串去表示不固定的内容

#####2.变量的类型:
自义环境变量: 
1. 方法一 export back_dir2=/home/backup 
2. 方法二 export back_dir1 将自定义变量转换成环境变量
 引用环境变量:变 量 名 或 {变量名}
 查看环境变量:echo $变量名 env 例如 env | grep back_dir2
 取消环境变量:unset 变量名
 变量作用范围:在当前Shell和子
3. 位置变量
		$1 $2 $3 $4 $5 $6 $7 $8 $9 ${10}
4. 预定义变量
        ``$0    脚本名``
	``$*		所有的参数``
	``$@ 	所有的参数``
	``$# 	参数的个数``
	``$$ 	当前进程的PID``
	``$!     上一个后台进程的PID``
	``$?		上一个命令的返回值 0表示成功``
#####3.*和@的区别

vim ping.sh

#!/bin/bash
ping ‐c2 $1 &>/dev/null
if [ $? = 0 ];then
echo “host $1 is ok”
else
echo “host $1 is fail”
fi
[root@qfdeu ~]# chmod a+x ping.sh
[root@qfdeu ~]# ./ping.sh 192.168.2.25

#####4.变量的赋值方式
######①显式赋值
变量名=变量值

ip1=192.168.1.251
school=“BeiJing 1000phone”
today1=date +%F
today2=$(date +%F)

######②read从键盘读入变量值
read 变量名
		read -p "提示信息: "  变量名
		read -t 5 -p "提示信息: "  变量名
		• -t 后面跟秒数,定义输入字符的等待时间
		read -n 2 变量名
		• -n 后跟一个数字,定义输入文本的长度,很实用。

[root@qfdeu ~]# vim first.sh
back_dir1=/var/backup
read ‐p "请输入你的备份目录: "
back_dir2 echo $back_dir1 echo
$back_dir2 [root@qfdeu ~]# sh first.sh

[root@qfdeu ~]# vim ping2.sh
#!/bin/bash
read ‐p "Input IP: " ip
ping ‐c2 $ip &>/dev/null
if [ $? = 0 ];then
echo “host $ip is ok”
else
echo “host $ip is fail”
fi
[root@qfdeu ~]# chmod a+x ping2.sh
[root@qfdeu ~]# ./ping.sh

#####5.定义引用变量
----""  弱引用
----''  强引用

[root@qfdeu ~]# school=1000phone
[root@qfdeu ~]# echo "KaTeX parse error: Expected 'EOF', got '#' at position 53: … [root@qfdeu ~]#̲ echo '{school} is good’
${school} is good

----(反引号)命令替换 等价于 $() 反引号中的Shell命令会被先执行

[root@qfdeu ~]# touch date +%F_file1.txt
[root@qfdeu ~]# touch KaTeX parse error: Expected 'EOF', got '#' at position 37: … [root@qfdeu ~]#̲ disk_free3="df…’ |awk '{print KaTeX parse error: Expected 'EOF', got '}' at position 2: 4}̲'" # 错误 [root@…(df ‐Ph |grep ‘/$’ |awk '{print KaTeX parse error: Expected 'EOF', got '}' at position 2: 4}̲') [root@qfdeu…’ |awk ‘{print $4}’`

#####6.变量"内容"的删除和替换
######①"内容"的删除

[root@qfedu ~]# url=www.sina.com.cn
[root@qfedu ~]# echo ${#url} # 获取变量值的长度
15
[root@qfedu ~]# echo ${url} # 标准查看 www.sina.com.cn
[root@qfedu ~]# echo ${url#.} # 从前往后,最短匹配
sina.com.cn
[root@qfedu ~]# echo ${url##
.} # 从前往后,最长匹配 贪婪匹配
cn
[root@qfedu ~]# url=www.sina.com.cn
[root@qfedu ~]# echo ${url} www.sina.com.cn
[root@qfedu ~]# echo ${url%.} # 从后往前,最短匹配
www.sina.com
[root@qfedu ~]# echo ${url%%.
} # 从后往前,最长匹配 贪婪匹配
www
[root@qfedu ~]# url=www.sina.com.cn
[root@qfedu ~]# echo ${url#a.}
www.sina.com.cn
[root@qfedu ~]# echo ${url#sina.} com.cn
[root@qfedu ~]# echo $HOSTNAME qfedu.1000phone.com
[root@qfedu ~]# echo ${HOSTNAME%%.
}
qfedu

######②"内容"的替换

[root@qfedu ~]# url=www.sina.com.cn
[root@qfedu ~]# echo ${url/sina/baidu}
www.baidu.com.cn
[root@qfedu ~]# url=www.sina.com.cn
[root@qfedu ~]# echo ${url/n/N}
www.siNa.com.cn
[root@qfedu ~]# echo ${url//n/N} 贪婪匹配
www.siNa.com.cN

######③变量的替代

[root@qfedu ~]# unset var1
[root@qfedu ~]#
[root@qfedu ~]# echo ${var1}
[root@qfedu ~]# echo ${var1‐aaaaa}
aaaaa
[root@qfedu ~]# var2=111
[root@qfedu ~]# echo ${var2‐bbbbb}
111
[root@qfedu ~]#
[root@qfedu ~]# var3=
[root@qfedu ~]# echo ${var3‐ccccc}

 111 
[root@qfedu ~]# 
[root@qfedu ~]# var3= 
[root@qfedu ~]# echo ${var3‐ccccc}

猜你喜欢

转载自blog.csdn.net/weixin_49844466/article/details/107846972