从零开始的Linux运维屌丝之路,资源免费分享平台   运维人员首选:简单、易用、高效、安全、稳定、社区活跃的开源软件

SHELL学习笔记完整版

发布:蔺要红06-30分类: 运维

 
cat  /etc/shells           # 系统中的shell
echo $SHELL                # 查看当前shell
vim /etc/default/useradd   # 更改默认的shell配置文件
bash -version              # 查看bash版本
env                        # 显示系统环境变量
locale                     # 显示系统语言环境变量

shell脚本的几种执行方式
#执行shell脚本的方式:/bin/sh /root/test.sh    #全路径执行
#执行方法 : sh  .  source
[root@zabbix ~]# cat test.sh 
user=`whoami`
[root@zabbix ~]# sh test.sh 
[root@zabbix ~]# echo $user

[root@zabbix ~]# ./test.sh 
[root@zabbix ~]# echo $user

[root@zabbix ~]# cat test.sh 
user=`whoami`
[root@zabbix ~]# . test.sh 
[root@zabbix ~]# echo $user
root
[root@zabbix ~]# source test.sh 
[root@zabbix ~]# echo $user
root
# .和source执行脚本与其他方式执行脚本的区别,只有这两种执行方式、变量user后面的`` 才会生效
# 子shell(脚本)可以直接继承父shell(系统)
# 如果希望父shell继承子shell  则使用source或者.执行脚本

环境变量
1.通常大写
2.可以在自身的shell以及子shell中使用
3.通过export 来定义环境变量(临时)
4.输出用:echo $变量名  取消:unset变量名
5.定时任务要注意环境变量,最好在脚本中重新定义
6.永久生效需要放在环境变量文件里或者全局环境变量文件里- /etc/profile
 
变量
1、单引号:可以说是所见即所得,单引号所有的内容都原样输出
[root@moban ~]# a='$USER'
[root@moban ~]# echo "$a"
$USER
[root@zabbix ~]# a=$USER  #注意区别
[root@zabbix ~]# echo $a
root

2、双引号(建议):把双引号内所有的内容都输出出来,如果内容中有命令(要反引下)、变量,
   特殊转义符等,会先把变量,命令,转义字符,解析出结果,然后再输出最终内容。
[root@zabbix ~]# dir="/etc/rc.local/$USER"
[root@zabbix ~]# echo "${dir}"
/etc/rc.local/root

3、无引号:把内容输出出来,会将含有空格的字符串视为一个整体输出,如果字符串中带有空格等字符串,则不能完成的输出,需要改加双引号,
   一般连续的字符串,数字,路径等可以不加任何引号,不过无引号的情况最好使用双引号

[root@zabbix ~]# DATE=$(date +%F) #如果不加引号有$还是会解析
[root@zabbix ~]# echo $DATE
2019-06-30


4、` ` :(1号键前面的字符)一般解析命令


#5.name=nginx   变量和内容之间不要有空格,学python学傻了,

6.如果变量后面有其他字符连接的时候,就必须给变量加上大括号{},例如:$dbname_tname 要改为 ${dbname}_tnname

总结:这些仅仅为结论,对于某些语言,例如awk内部就有特殊
1.脚本中定义普通字符串变量,尽量把变量的内用用双引号引起来
2.单处数字的变量内容可以不加引号
3.希望变量的内容原样输出,加单引号
4.希望引用命令并获取命令结果,就用反引号

变量总结
变量总结:
1、变量名只能为字母,数字,下划线,只能字母或下划线开头
2、规范 Passwd=1 or  WebDir=/www
3、= 是赋值的意思  比较变量是不是相等可以使用 = 或者 == 字符串比较也可以使用=
4、打印变量,变量名前接$ 变量名紧跟着字符的是,要使用{}将变量单独括起来,防止出问题
5、打印输出或使用变量时,一般用双引号,或者不加引号,如果是字符串变量,最好加双引号,简单的字符串可以不加引号,希望原样输出,使用单引号
6、变量的内容是执行命令,要使用反引号``或者 $() 把变量括起来使用

位置变量
# 常用来给脚本传参

$0 获取当前执行脚本的shell脚本文件名,如果执行脚本带路径,那么久包括脚本路径

$n 获取当前执行shell脚本的第n个参数值,n=1..9 当n等为0时表示脚本的文件名,如果n大约9,用大括号$(10),参数以空格隔开
[root@moban ~]# cat p.sh 
echo $1 $2
[root@moban ~]# sh p.sh linyaohong  lin #脚本中$1会接收到linyaohong $2会接收到lin
linyaohong lin

$# 获取当前执行的shell脚本后面接的参数的总个数
控制命令行脚本参数的个数
    #!/bin/bash
    if [ $# -ne 2 ]
	    then 
	     echo "you must user /root/sh $0 n1 n2"
	     exit 1
    fi



 
温馨提示如有转载或引用以上内容之必要,敬请将本文链接作为出处标注,如有侵权我会在24小时之内删除!

欢迎使用手机扫描访问本站