shell脚本学习第一天
shell脚本与Windows/Dos下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。相对于Perl、Python等脚本语言优势在于它能处理底层业务,因为有大量Linux命令作为支撑,如“报警业务”,“一键安装”等用shell脚本写就会非常简单。 Linux下的shell脚本默认为bash ,sh其实是bash的一个链接。 查看默认shell的两种方法: >echo $SHELL
/bin/bash
>grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
一个简单的脚本:之前在这篇文章中配置桥接的静态IP的时候是手动操作的,下次换了一个网络又要重新配置,所以写了个脚本来自动配置。基于这个脚本来学习一下简单的shell脚本。 #!bin/bash
ETC_DIR=/etc/sysconfig/network-scripts
NET_DIR=/etc/sysconfig
ROOT_UID=0
if [ "$UID" -ne "$ROOT_UID" ] #判断是否为root权限
then
echo "Must be root to run this script"
exit 1
fi
cd $ETC_DIR || {
echo "Cannot change to necessary directory,">&2
exit 1
}
cat /dev/null >ifcfg-eth0 && echo "clean ifcfg-eth0 ok!"
#写入eth配置:
cat /home/yangni/staticip/myip >ifcfg-eth0 && echo "write eth0 sucessfully"
cd $NET_DIR || {
echo "Cannot change to necessary directory,">&2
exit 1
}
cat /dev/null >network #清空network
#将默认网关相关配置写入network
cat /home/yangni/staticip/mynetwork > network && echo "write network sucessfully"
service network restart #重启网络命令
exit 0
1、UID是一个系统变量,当前是root权限 UID=0,当前非root权限UID不等于0 2、清空文件的三种方法:清空日志的三种方法:
1、echo "">test.log
2、echo >test.log
3、cat /dev/null >test.log
在改代码中我们用的是第三种方法: 3、&&与||的使用:cat /dev/null >ifcfg-eth0 && echo "clean ifcfg-eth0 ok!"
这里&&表示,只有当前面的命令执行成功以后才执行后面的命令。 cd $NET_DIR || {
echo "Cannot change to necessary directory,">&2
exit 1
}
所以如果不能够进入到该目录下,就打印错误信息。&2表示标准出错,&0表示表示标准输入。&1表示标准输出。 脚本执行:脚本执行时候会先调用环境变量,去找相关变量,有的变量是系统已经定义可直接使用,如上文用到的UID。 cat /etc/profile (全局)
cat /etc/profile.d (全局)可以把变量放在这里面就可以直接用
.bashrc:用户环境变量
脚本执行的三种方法:
所以用 . 和sh运行时就会出现如下现象: 执行结果截图:如果没有使用root权限: 加上sudo之后: 贴上myip和mynetwork两个文件: DEVICE=eth0
HWADDR=00:0C:29:03:4D:EC #物理地址无需修改
BOOTPROTO=static
NM_CONTROLLED=yes #实时生效,修改后无需要重启网卡立即生效
IPADDR=192.168.0.27
BROADCAST=192.168.0.255
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
ONBOOT=yes #开机启用网络配置。
TYPE=Ethernet
DNS1=8.8.8.8
IPV6INIT=no
USERCTL=no
mynetwork: NETWORKING=yes
HOSTNAME=yangni
GATEWAY=192.168.0.1 #添加网关地址 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |