变量就是内存一片区域的地址,用一串固定的字符来表示不固定的目标。
一、变量的定义
环境级别
export a=2 ##生效于当前shell环境
用户级别
vim ~/.bash_profile ##生效于当前用户
export a=2
:wq
source ~/.bash_profile
系统级别
vim /etc/profile.d/westos.sh ##生效与整个系统
export b=3
:wq
source /etc/profile.d/westos.sh
变量名称:
由字母,下划线_,数字组成。不能用数字开头
二、变量的转译,声明,数组
转译
\ ##转译单个字符
"" ##弱引用,批量转译个数字符 不能转译\ $ !
'' ##强引用
声明
a=1
echo $ab
echo ${a}b ##用{}声明a是个变量
数组
b=(1 2 3 4 5)
echo ${b[*]} ##所有元素
echo ${b[0]} ##第一个元素
echo ${b[1]} ##第二个元素
echo ${b[-1]} ##倒数第一
echo ${b[-2]} ##倒数第二
echo ${b[@]} ##所有
echo ${b[@]:1:2} ##从第2个元素开始后两个元素
unset b[1] ##删除第二个元素
unset b ##删除变量
三、Linux中命令的别名设定
alias xie='vim' ##临时设定
vim ~/.bashrc ##只针对与用户生效
alias xie='vim'
:wq
soure ~/.bashrc
vim /etc/bashrc ##针对系统所以用户生效
alias xie='vim'
:wq
soure /etc/bashrc
alias ##查看所有别名
unalias xie ##删除当前环境中的alias
四、用户环境变量的更改
vim ~/.bash_profile
PATH=$PATH:$HOME/bin:/mnt ##执行命令时/mnt下的命令和脚本可以相对路径调用
:wq
source ~/.bash_profile
五、传参
1.直接利用命令执行结果作变量的值
TIME=$(date) 或者TIME='date'
2.脚本中的非交互传参
若一个脚本为test.sh,执行时:sh test.sh westos linux redhat。则在脚本中各个变量的含义为:
$0 -----> test.sh 脚本本身
$1 -----> westos 脚本后所输入的第一串字符
$2 -----> linux
$3 -----> redhat
$* -----> westos linux redhat 脚本后所输入的所有字符"westos linux redhat"
$@ -----> westos linux redhat 脚本后所输入的所有字符'westos' 'linux' 'redhat'
$# -----> 3 脚本后所输入的字符串个数
3.交互传参
read WESTOS ##对westos赋值
read -p "please input word:" ##输出提示语
-s ##隐藏输入内容
六、脚本函数
可以理解为脚本中的脚本
WORD()
{
action1
action2
}
WORD 在脚本中就代表action1 action2这两个动作
脚本练习:
1、编写check_file.sh 用来判别文件类型,可反复输入,输入exit时退出
#!/bin/bash
File_Type()
{
[ $1 "$FILENAME" ] && {
echo $FILENAME is $2
echo ""
Check_File
}
}
Check_File()
{
read -p "please input filename:" FILENAME
[ "$FILENAME" = "exit" ] && {
echo "Bye"
exit
}
File_Type "! -e" "not exist"
File_Type -L "link file"
File_Type -f "common file"
File_Type -d "directory"
File_Type -S "socket"
File_Type -b "block file"
File_Type -c "cahr file"
}
Check_File
2、编写create_user1.sh 实现建立用户与设置密码,可反复输入,输入exit退出
#!/bin/bash
Create_User()
{ read -p "Please input username:" NAME
[ "$NAME" = "exit" ] && {
echo "Bye"
exit
}
id $NAME &> /dev/null && {
echo "$NAME is exist"
} || {
useradd $NAME
read -p "Please input password:" -s PASSWD
echo ""
echo $PASSWD | passwd --stdin $NAME &> /dev/null && echo "$NAME is created"
}
Create_User
}
Create_User