shell脚本基础
================================================================================
查看一下系统支持的shell
# chsh -l
# cat /etc/shells
[root@localhost ~]# chsh -l /bin/sh /bin/bash /sbin/nologin /usr/bin/sh /usr/bin/bash /usr/sbin/nologin [root@localhost ~]# [root@localhost ~]# cat /etc/shells /bin/sh /bin/bash /sbin/nologin /usr/bin/sh /usr/bin/bash /usr/sbin/nologin
打印当前shell的进程ID
# echo $$
[root@localhost ~]# echo $$ 1565
打印子shell的进程ID
[root@localhost ~]# bash [root@localhost ~]# [root@localhost ~]# echo $$ 2092
一、变量
1、本地变量
取消变量
# unset aa
2、环境变量
环境变量可影响子shell
定义环境变量
查看UID、GID
打印path,每个路径都是以冒号隔开。
su加“-”和不加“-”涉及到家目录和环境变量的问题。加“-”有环境变量。
不加“-”
$ su root
加“-”
$ su - root
Linux环境配置文件---------.bashrc文件
.bashrc文件主要保存个人的一些个性化设置,如命令别名、路径等。
也即在同一个服务器上,只对某个用户的个性化设置相关。
修改“.bashrc”对当前用户生效
# vi .bashrc
修改“/etc/bashrc”对所有用户生效
# vi /etc/bashrc
我们敲命令的时候,是需要写这个命令的路径的
如果你没有写路径的话,则会到默认指定的路径里去找
当你登录终端的时候,系统会自动的执行家目录下面的一些隐藏文件.bashxxxx
3、位置变量
[root@localhost ~]# cat eg19.sh #!/bin/bash echo "这是我的第一个脚本,脚本的名字是:$0" echo "第一个参数是:$1" echo "第二个参数是:$2" echo "第三个参数是:$3"
执行结果如下:
[root@localhost ~]# sh eg19.sh 这是我的第一个脚本,脚本的名字是:eg19.sh 第一个参数是: 第二个参数是: 第三个参数是: [root@localhost ~]# [root@localhost ~]# sh eg19.sh du jia li 这是我的第一个脚本,脚本的名字是:eg19.sh 第一个参数是:du 第二个参数是:jia 第三个参数是:li [root@localhost ~]# [root@localhost ~]# [root@localhost ~]# sh eg19.sh a b c 这是我的第一个脚本,脚本的名字是:eg19.sh 第一个参数是:a 第二个参数是:b 第三个参数是:c
(1)、basename和dirname的区别
[root@localhost ~]# basename /usr/share/doc/ doc [root@localhost ~]# [root@localhost ~]# dirname /usr/share/doc/ /usr/share [root@localhost ~]# [root@localhost ~]# basename /usr/share/doc doc [root@localhost ~]# [root@localhost ~]# dirname /usr/share/doc /usr/share
一个命令中牵扯到另一个命令,另一个命令需要加反引号esc(退出键)下面那个按键``
#!/bin/bash echo "这是我的第一个脚本,脚本的名字是:`basename $0`" echo "第一个参数是:$1" echo "第二个参数是:$2" echo "第三个参数是:$3"
执行结果如下:
[root@localhost ~]# chmod +x eg19.sh [root@localhost ~]# [root@localhost ~]# ./eg19.sh a b c 这是我的第一个脚本,脚本的名字是:eg19.sh 第一个参数是:a 第二个参数是:b 第三个参数是:c
(2)、set设置变量
# set a b c d e f g h i j k l m n
[root@localhost ~]# set a b c d e f g h i j k l m n [root@localhost ~]# [root@localhost ~]# echo $0 -bash [root@localhost ~]# [root@localhost ~]# echo $1 a [root@localhost ~]# [root@localhost ~]# echo $2 b [root@localhost ~]# [root@localhost ~]# echo $3 c [root@localhost ~]# [root@localhost ~]# echo $4 d [root@localhost ~]# [root@localhost ~]# echo $9 i [root@localhost ~]# [root@localhost ~]# echo $10 a0 [root@localhost ~]# [root@localhost ~]# echo ${10} j [root@localhost ~]# [root@localhost ~]# echo $11 a1 [root@localhost ~]# [root@localhost ~]# echo ${11} k
(3)、echo中的双引号和单引号
注意{}和反斜杠\
echo中的单引号
$#和$*
$#判断有多少个参数
$*判断有哪些参数
if条件语句,条件成立,则执行then后面的内容
if [ 条件 ] ; then
当我们执行完一个命令之后,这个命令的结果会放在一个地方 $?
正确 为0
错误 为非零
2、返回值
利用返回值判断用户是否是否存在
3、对比
数值对比:
-eq(等于)equal
-gt(大于)greater than
-ge(大于等于)greater equal
-lt(小于)less than
-le(小于等于)less equal
-ne(不等于)not equal
条件表达式:
【】 、【【】】 注:前后要有空格
test 注:加测试表达式
字符对比
==(等于)
!=(不等于)
【】和【【】】的区别
[ $name == tom ]------------?为通配符
判断是否为纯数字
# [[ $aa =~ ^[0-9]+$ ]]
判断是否具有某个属性
-r 测试当前用户是否有权限读取(Read)
-w 测试当前用户是否有权限写入(Write)
-x 测试当前用户是否有权限执行(eXcute)
-d 测试是否为目录(Directory)或目录是否存在
-e 测试目录或文件是否存在(Exist)
-f 测试是否为文件(File)或文件是否存在
!-----------------取反
连接符:
&&(and)全真为真,一假全假
||(or)
例:一假全假
例:全真为真
&&按顺序执行
直到遇到假,执行结束
||(or)一真全真
||(or)全假为假
||按顺序执行
直到遇到真,执行结束
$[]、$(())、expr、let、declare都不能用小数
$[]和$(())用法相同
expr只能做加减运算
let
let连加
加号写在后面bb=aa++(先把aa的值,赋值给bb)后加先赋值
加号写在前面bb=++aa(aa先加1再赋值给bb)先加后赋值
declare定义成整形
bc(计算器)
scale小数点后几位
如果某个命令需要和用户交互,那么你可以通过echo的方式把要输入的值通过管道发给这个命令。