shell基础以及脚本中的变量
shell基础
问题导向“什么是shell?
shell:Linux系统是一个多任务,多用户的操作系统,内核负责任务的调度与管理,为了阻碍外界直接对内核进行操作,就加一层shell来保护内核,所以说它是一个用户和Linux内核之间的接口程序,在提示符下输入的每个命令都由shell先解释然后传给Linux内核。用户通过这个界面访问操作系统内核的服务。
bash:Linux中默认的shell就是bash(Bourne-Again shell)
还有许多shell:tcsh,ash,bsh,csh,ksh等。
脚本:脚本是一种解释型语言
存在的意义:记录在Linux系统中的操作步骤,进行批量操作的一个程序文件。
数据+逻辑=程序
shell python perl 都是解释性语言
一、shell脚本的创建
1、创建:以.sh结尾文件,表示这是一个脚本
vim script.sh
#!/bin/bash脚本使用的解释器,通常用幻数 "#!" 指定
#AUTHOR 作者
#DATE 创建日期
#MAIL 联系方式
#VERSION 版本号
2、脚本编写的规范:
在vim的配置文件里/etc/vimrc设定使在编写脚本时,自动加上注释:
方法1:在vim新的文件时,自动加上,但是不会在已经存在文件里加上,比如touch file.sh 然后vim file.sh时,就不会加上,至于是自动给以什么文件结尾里边加,在vimrc里可以设定
方法2:写脚本时,vim脚本,点击快捷键自动加上
二、脚本调试与执行:
1、脚本的调试:
sh -x scripts 前边的加号是脚本内容,没有+的是执行完脚本的结果
一般写脚本,最好写完一个命令,然后测试,这样比较好排错
2、脚本的执行
1、需要执行权限,原因,在绝对路径执行脚本\234不需要执行权限原因:在当前目录执行
1、 ./script.sh需要有执行权限chmod +x script.sh 因为该命令以绝对路径执行脚本
2、bin/bash script.sh 执行,会在当前shell里开启一个子shell
3、source scripts.sh 会立即在当前系统生效
4、. scripts.sh 相当于source
三、脚本示例
1、显示当前的IP地址并且不显示回环IP: ifconfig | awk '/inet\>/&&!/127.0.0.1/{print $2}'
2、执行 user_show.sh 显示当前主机里能登陆系统的用户
3、执行 host_message.sh 显示当前主机的名称,IP,以及能登陆的用户
4、clear_log.sh 执行命令清空日志
脚本中的变量
一、
变量的定义
变量即在程序运行过程中它的值是允许改变的量
变量是用一串固定的字符来标示不固定的值的一种方法
变量是一种使用方便的占位符,用于引用计算机内存地址,该地
址可以存储 Script 运行时可更改的程序信息
在 shell 中变量是不能永久保存在系统中的,必须在文件中声明
$USER变量 -- 内存地址的别名
下边二者的不同:
su - user 会加载用户的环境变量
su user 不会加载profile环境信息
/etc/profile
env 查看所有的系统环境变量
二、shell脚本里变量的定义方法
环境级: export a=1 只在当前环境生效,比如切换一次shell环境就是改变了,此时变量不生效
用户级 :vim ~/.bash_profile 在该文件里写入变量,只在当前用户下生效
source .bash_profile
系统级: vim /etc/profile 相当于全局变量
source .bash_profile
三、变量名称的规范:
变量名可以由字母的大小写,数字,下划线组成。
Hello_World 或者HELLO_WORLD
四、字符的转译及变量的声明
- \ 转译单个字符
"" 弱引用,批量转译 "" 中出现的字符,
'' 强引用,批量转译 '' 中出现的字符
'' 与 "" 两者的区别在于, "" 不能转译 "\","`","!","$"
- ${} 变量声明
例如: A=1
echo $Ab
echo ${A}b
五、变量值传递
$1脚本后的第一串字符串
$2脚本后的第二串字符串
$3脚本后的第三串字符串
$#脚本后所跟字符串的哥数
$*脚本后跟的所有字符串,模式为“ 1 2 3 ”
&@脚本后跟的所有字符串,模式为“ 1”“2”“3”
六、用 read 实现变量传递
read WESTOS
read -p "input: " -s WESTOS 输出不回显
七、Linux系统中命令别名的设定
alias 显示命名别名以及系统中的
alias yyz='systemctl restart network' 环境设定
vim ~/.bashrc 用户设定,只针对该用户有作用
添加别名设定
vim /etc/bashrc 系统及设定
添加别名设定
系统和用户环境的添加完毕,执行命令:
source .bashrc
读取新加的设定
Linux系统中命令别名的删除
步骤:
1、在文件中删除
2、unalias 别名设定
八、、利用命令执行结果设定变量
1、Hostname=$(hostname) 将hostname这一执行结果设定为变量
Hostname=`hostname`
e
echo $Hostname则显示的主机信息
$?
$? 是命令在执行完成之后产生的退出值
范围是 [0-255]
当 $0=0 时表示命令执行没有错误输出
这个值可以用 exit 命令执行 .
例如 exit 66
九、、脚本中的函数
脚本中的函数时把一个复杂的语句块定义成一个字符串的方法
例1:RED函数
RED()
{
echo -e "\033[31m$*\033[03m"
}
RED ”hello world!!“
思路转换:可以类比C语言的函数,递归显示重复输出
例2:创建create_user.sh脚本,功能是创建用户以及密码,用户存在时,提示用户存在,然后继续输入要创建的用户,然后设定用户密码,输入exit,退出。
USER()
{
read -p "please input username:" username
[ "$username" = "exit" ]&&{
echo bye
exit 0
}
useradd $username &> /dev/null&&{
read -p "please input password:" -s passwd
echo $passwd | passwd --stdin $username &> /dev/null
echo ""
echo -e "\033[32m$username is created successful !!!\033[0m"
}||{
echo -e "\033[32m$username is already exist !!!\033[0m"
}
USER
}
USER