目录
三、命令使用:echo、eval、exec、export、read、shift、exit(要求退出码为222)这些命令的功能,以及用例。
题目
1.命令使用:echo、eval、exec、export、read、shift、exit(要求退出码为222)
这些命令的功能,以及用例
2.使用read从标准输入读取两个变量: name1和name2, 要求name1包含空格
3.定义自定义环境变量:(使用export和declare)
针对root用户的所有连接:root_data=root
针对所有用户的变量: all_data=all
查看所有的环境变量, 查看所有变量
4.脚本执行的方式及特点:用样例验证
5.设置vim编辑sh文件的缩进为4个空格
6.$#,$*,$@,$n,$?的使用
一、作为程序设计的语言—shell
二、shell脚本编写规范
三、命令使用:echo、eval、exec、export、read、shift、exit(要求退出码为222)这些命令的功能,以及用例。
echo 可在屏幕上输出信息
功能:用来输出字符串或者变量
参数:
-n:不换行输出文件内容
-e:解析转义字符
示例:
[root@localhost day1]# echo 111;echo 222
111
222
[root@localhost day1]# echo -n 111;echo 222
111222
[root@localhost day1]# echo 111;echo 222
111
222
[root@localhost day1]# echo -n 111;echo 222
111222
eval
命令格式: eval args功能:当 shell 程序执行到 eval 语句时, shell 读入参数 args ,并将它们组合成一个新的命令,然后执行。
示例:
[root@localhost day1]# a='data;head -1 /etc/passwd'
[root@localhost day1]# echo $a
data;head -1 /etc/passwd
[root@localhost day1]# eval echo $a
data
root:x:0:0:root:/root:/bin/bash
补充:
1、exec 命令能够在不创建新的子进程的前提下,转去执行指定的命令,当指定的命令执行完毕后,该进程就终止了。2、export 设置或者显示环境变量3、read 命令可从标准输入读取字符串等信息,传给 shell 程序内部定义的变量。-p prompt:设置提示信息-t timeout:设置输入等待时间,单位默认为秒5、exit ,退出 shell 程序。在 exit 之后可以有选择地指定一个数作为返回状态
export
设置或显示环境变量
示例1:
[root@localhost day1]# export
declare -x DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/0/bus"
declare -x DISPLAY="localhost:10.0"
declare -x HISTCONTROL="ignoredups"
declare -x HISTSIZE="1000"
...
示例2:
[root@localhost day1]# a=123456 //定义变量a
[root@localhost day1]# export a //把a变为环境变量
[root@localhost day1]# b=0 //定了变量b,但不成为环境变量
[root@localhost day1]# bash //进入到一个子进程
[root@localhost day1]# echo $a //输出a变量值
123456
[root@localhost day1]# echo $b //变量b没有值
[root@localhost day1]# unset a //删除变量a
[root@localhost day1]# echo $a
[root@localhost day1]#
示例3:
使用export和declare命令来定义环境变量,针对root用户的所有连接:root_data=root,针对所有用户的变量: all_data=all
[root@localhost day1]# all_data=all
[root@localhost day1]# read_data=root
[root@localhost day1]# export read_data
[root@localhost day1]# declare -x all_data
[root@localhost day1]# env //查看所有环境变量
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44.....
[root@localhost day1]# declare //查看变量
quote ()
{
local quoted=${1//\'/\'\\\'\'};
printf "'%s'" "$quoted"
}
....
read
功能: 从标准输入内容中读取字符串等信息,并传递给shell内部定义的变量
参数:
-p:设置提示信息-t:设置等待时间,默认单位为秒
示例:
[root@localhost day1]# read -t 10 -p "please input your name: " name
please input your name: zhangsan
[root@localhost day1]# echo $name
zhangsan
读取俩个变量,name1,name2,其中name1包含空格
[root@localhost day1]# read name1;read name2
Fat cat
Tom
[root@localhost day1]# echo $name1
Fat cat
[root@localhost day1]# echo $name2
Tom
shift
在程序中每使用一次shift语句,都会使所有的位置参数依次向左移动一个位置,并使位置参数$#减1,直到减到0为止。
[root@localhost day1]# vim a.sh
//内容如下
#!/bin/bash
shift
echo $@
[root@localhost day1]# bash a.sh 11 22 33 44
22 33 44
exit
退出shell程序。在exit之后可以有选择地指定一个数作为返回状态
示例:
[root@localhost day1]# vim b.sh
#!/bin/bash
echo "abc"
exit 222
echo "mm21"
[root@localhost day1]# echo $?
222 //并没有执行后面的命令
[root@localhost day1]#
四、脚本执行的方式及特点:用样例验证
[root@localhost day1]# for i in `ls /etc`
> do
> if echo "$i" | grep "passwd"
> then
> echo "$i"
> fi
> done
示例:
[root@localhost day1]# vim work1.sh
#!/bin/bash
for i in `ls /etc`
do
if echo "$i" | grep "passwd"
then
echo "$i"
fi
done
五、设置vim编辑sh文件的缩进为4个空格
[root@localhost ~]# vim .vimrc
set tabstop=4
[root@localhost ~]# source .vimrc
六、 $#,$*,$@,$n,$?的使用
$#:命令行参数的个数$*:以 " 参数 1 参数 2 参数 3…" 的形式返回所有参数的值$@:以 “ 参数 1”“ 参数 2”“ 参数 3”… 的形式返回所有的值$?:前一个命令或者函数的返回状态码。 $? 的返回值用法:(1)判断命令、脚本或函数等程序是否执行成功(2)若在脚本中调用执行 “exit 数字 ” ,则会返回这个数字给 “$?” 变量(3)如果是在函数里,则通过 “return 数字 ” 把这个数字以函数值的形式传给 “$?”$n:表示传递给脚本的第 n 个参数,例如 $1 表示第一个参数, $2 表示第二个参数, $3 表示第三个参数$0:当前脚本的名称$$:返回本程序的进程 ID ( PID ),不常用$!:获取上一个在后台工作的进程的进程号,不常用$_:保存之前执行的命令的最后一个参数,不常用
示例:
[root@localhost day1]# vim a.sh
#!/bin/bash
echo $#
echo $*
echo $@
echo $1
[root@localhost day1]# bash a.sh aa bb cc
3
aa bb cc
aa bb cc
aa
[root@localhost day1]# echo $?
0