Linux学习之二十一-shell编程基础

Shell编程基础

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。Shell 脚本(shell script),是一种为 shell 编写的脚本程序

Shell 编程跟 java、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了

  1. Linux中的shell种类(shell解释器的种类)

[[email protected] ~]# cat /etc/shells

/bin/sh

/bin/bash

/sbin/nologin

/bin/dash

/bin/tcsh

/bin/csh

  1. shell脚本基本规则及执行

在shell脚本文件中,第一行要指明使用哪种shell解释器

#!/bin/bash            #指定shell解释器为bash

从第二行开始的内容就是若干命令

例:简单的shell脚本

#!/bin/bash

pwd

mkdir -p test{1..10}

touch test{1..10}/oldboy{1..10}

ifconfig eth0|awk -F "[: ]+" ‘NR==2{print $4}‘>>ip.txt

echo "hello world!"

parted /dev/sda p

shell脚本的执行方式

方法1、bash + 脚本名称

方法2、sh + 脚本名称

可以使用参数sh -x 进入到debug调试模式,查看执行过程

方法3、./ + 脚本名称

方法4、直接使用脚本的绝对路径即可

  1. shell脚本引用变量

3.1 如果shell脚本全部是命令,灵活性会比较差,可以通过引用变量来实现,变量可以直接赋值也可以通过执行命令来赋值

变量的命名规则:

不能和系统已有的命令名字相同(多用大写字母),不能以数字开头

只能以下划线,字母开头,变量中间允许有数字

不能和系统当前已有的环境变量相同

3.2 执行命令env查看当前的环境变量

只查看系统所有环境变量名称env|awk -F "=" ‘{print $1}‘

调用环境变量echo %变量名%

3.3 特殊环境变量$PS1可以自定义终端命令提示符

echo $PS1

PS1=‘[\[email protected]\h \W]\$‘

PS1=‘[\[\e[31;1m\]\t\[\e[0m\] \[email protected]\h \W]#‘

[[email protected] ~]# echo $PS1

[\[email protected]\h \W]\$

[[email protected] ~]# PS1=‘[\[\e[31;1m\]\t\[\e[0m\] \[email protected]\h \W]#‘

[20:56:21 [email protected] ~]#

3.4 引用变量实例

#!/bin/bash

name=`hostname`

echo "你当前的主机名是 $name"

ip=`ifconfig eth0|awk -F "[: ]+" ‘NR==2{print $4}‘

echo "你当前的ip地址为$ip"

ks_line=`cat /root/anaconda-ks.cfg|wc -l`

echo "ks文件检测 共$ks_line行"

rpm_count=`rpm -qa|wc -l`

echo "rpm包检测 共$rpm_count个"

ip_r=`route -n|awk ‘$1=="0.0.0.0" && $2=="10.0.0.254"‘|wc -l`

echo "网关检测 合格值为$ip_r"

log_file=`wc -l /tmp/install.log|wc -l`

echo "install日志检测 合格值为$log_file"

se_status=`sestatus|awk ‘{print $NF}‘`        #sestatus查看selinux状态

echo "selinux状态检查 状态为$se_status"

ssh_config=`cat /etc/ssh/sshd_config|wc -l`

echo "ssh 优化检测 合格值为$ssh_config"

  1. shell脚本中的for循环

例1:若需要批量创建10个用户,并生成随机密码并进行修改,且重定向到文件中显示用户名和密码

#!/bin/bash

for i in `seq -f stu%g 1 5`

do

useradd $i;PASS=`date +%N|md5sum|cut -c 1-8`;echo $i:$PASS >> passwd.txt;echo $PASS|passwd --stdin $i

done

例2:利用for循环,来优化开机启动项

#!/bin/bash

for i in `chkconfig|grep ‘^[a-Z]‘|awk ‘{print $1}‘|sed ‘$d‘`; #先关闭所有开机启动项

do

echo $i

chkconfig $i off

done

for j in network crond sysstat rsyslog sshd;    #再开启需要的启动项

do

chkconfig $j on

done

例3:利用for循环,将txt结尾的文件修改为TXT

#!/bin/bash

for i in `ls *.txt`

do

old_name=`echo $i|awk -F "." ‘{print $1}‘`

mv $i ${old_name}.TXT

done

例4:嵌套for循环

批量创建10个以oldboy开头的目录,并在目录中创建10个大于300k的文件要求使用dd命令来创建文件

#!/bin/bash

mkdir oldboy{1..10}

for n in oldboy{1..10}

do

for m in test{1..10}

do

dd if=/dev/zero of=${n}/$m bs=101k count=3

done

done

5、shell脚本中的if判断语句

有关判断的参数

gt    大于

eq    等于

lt    小于

ge    大于等于

le    小于等于

-o     逻辑或

-z    判断输入的是否为空

-n    判断输入的是否不为空

例1:猜数字游戏

#!/bin/bash

num1=`echo $RANDOM*35/32767+1|bc`

read -p "请输入一个数字:" num2

echo $num1

if [ $num1 -gt $num2 ];then

echo "你猜的小了"

elif [ $num1 -eq $num2 ];then

echo "恭喜你,猜对了!"

else

echo "你猜的大了"

fi

例2:利用固定用法read -p ‘*** ‘ str来读取shell执行后用户输入的内容,判断是否为空

#!/bin/bash

read -p ‘请输入一个字符串:‘ str

echo $str

if [ -z $str ];then

echo "你输入的内容不能为空!"

fi

  1. shell脚本生产案例

定时打包备份,保留最近一周的备份文件,过去的文件保留周六的

mkdir -p /service/scripts

cd /service/scripts/

注意:此处要求备份七天以外每周六的内容,可以选择在周六刚刚过渡到周天的日期即周天凌晨,这样周六的内容备份才较为完整,备份内容为周六的,那么压缩包的名称需要用date命令的-d yesterday参数

#!/bin/bash

####beifen

W=`date +%w`

if [ $W -eq 0 ];then

tar zcvf /backup/6_etc_`date -d yesterday +%F`.tar.gz /etc

else

tar zcvf /backup/etc_`date -d yesterday +%F`.tar.gz /etc

fi

####qingli

find /backup -type f -name "*.tar.gz" -mtime +7|grep -v ‘6_etc_‘|xargs rm –rf

编写脚本进行测试,修改当前时间并备份,最后同步时间

#!/bin/bash

for n in `seq -w 24`

do

date -s "201804$n";/bin/bash /service/scripts/backup.sh

done

ntpdate ntp1.aliyun.com

再把脚本写到定时任务中

#on time backup

  1. 00 * * * /bin/bash /service/scripts/backup.sh &>/dev/null

关于shell脚本的更多知识点,可以参考

http://www.runoob.com/linux/linux-shell.html

博主原创文章,转载请务必注明出处

原文地址:https://www.cnblogs.com/ssgeek/p/9220852.html

时间: 2024-10-24 20:33:50

Linux学习之二十一-shell编程基础的相关文章

linux学习笔记四(shell编程)

前言:最近在学习shell编程,shell编程是一个很强大的编程语言. 目的:方便今后复习. 内容:1.简单的回顾一下编程语言                 1)编程语言:机器语言,汇编语言,高级语言.                 2)编程语言有静态和动态的区分.                             区别:静态语言是一种编译性的语言,要提前知道变量的格式,进过完整的编译之后才能运行,典型的静态语言包括:C.C++.JAVA.C#.                    

Linux学习(二十一)Shell基础(一)认识shell、命令历史、命令补全、别名、通配符、管道符与前后台控制

前言 这个系列我们学习shell的基础知识. 一.认识shell 我们经常使用的终端,其实就是一个shell.Bourne开发的shell原本叫shell,后来再版Bourne Again Shell叫做Bash.我们通常使用的shell就是Bash. 二.命令历史 history命令能够记录我们使用过的命令: [[email protected] ~]# history|tail -n3 803 history|tail -n3 804 history 805 history|tail -n3

linux基础学习-17-linux操作系统之Shell编程基础讲解

1,前言 1.1 为什么学习shell编程 Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具,Linux/UNIX系统的底层及基础应用软件的核心大部分涉及Shell脚本的内容.每一个合格的Linux系统管理员或运维工程师,都需要熟练的编写Shell脚本语言,并能够阅读系统及各类软件附带的Shell脚本内容.只有这样才能提升运维人员的工作效率,适应日益复杂的工作环境,减少不必要的重复工作,从而为个人的职场发展奠定较好的基础. 1.2 学好Shell编程所需的基础知识

linux学习笔记四(shell编程二)

写一个脚本: 计算100以内所有能被3整除的正整数的和: 取模,取余:% 3%2=1 100%55=45 #!/bin/bash let SUM=0 for I in {1..100};do         TMP=$[$I%3]         if [ $TMP -eq 0 ];then                 SUM=$[$SUM+$I]         fi done echo "SUM is $SUM" 写一个脚本: 计算100以内所有奇数的和以及所有偶数的和:分别显

Linux学习笔记<二十一>——busybox制作小系统

制作流程: kernel->initrd(busybox)->rootfs(busybox) kernel:直接利用/boot/vmlinuz-`uname -r`内核镜像或手动编译生成 initrd:编译busybox,在busybox的基础上建立initrd rootfs:同样在busybox的基础上建立rootfs 一.为小系统上的新硬盘建立分区并挂载在宿主机的相应目录,以便创建修改文件. /dev/hda1    100M    boot分区    挂载在/mnt/boot /dev/

【Linux学习笔记二】Shell基本命令

[注]文章中的所有截图均为centos下实验结果,亲测命令正确= ̄ω ̄= [参考资料]<Linux从入门到精通(第2版)>刘忆智 等编著 1.命令行接收用户的输入,然后传递给命令解释器,即Shell.BASH shell是默认安装和使用的Shell. 2.Linux默认有七个控制台,可以通过快捷键 Ctrl + Alt + F1 ~ F7 进入,默认情况下前六个是命令行控制台,第7个留给X服务器. 3.提示符 "$" :表示命令行的开始,用户可以输入命令了:root身份执行

linux学习第二周;shell编程

pstree -p #显示进程编号(树状) echo $$ #显示当前shell进程编号 脚本的基本结构 : #!SHEBANG (表明使用什么shell打开文件,一般使用bash) CONFIGURATION_VARIABLES #定义变量 FUNCTION_DEFINITIONS#定义函数 MAIN_CODE #主要执行命令 检测脚本中的语法错误 bash -n /path/to/some_script 调试执行 bash -x /path/to/some_script 变量命名法则: 1.

linux学习之二:日常的基础命令收集

1. ls 2.pwd 显示当前目录所在位置 3.date 日期时间 4.cal 日历 默认显示当前该月 cal 2012 :查看2012年的日历 cal 月 年 : 查看某年某月的日历 5.bc 计算器 bc 默认执行结果取整 bc  scale=2 默认执行结果保留两位小数 6.man page.tab.gedit 命令----------------->学会运用来查看帮助文档

Linux 程序设计学习笔记----终端及串口编程基础之概念详解

转载请注明出处,谢谢! linux下的终端及串口的相关概念有: tty,控制台,虚拟终端,串口,console(控制台终端)详解 部分内容整理于网络. 终端/控制台 终端和控制台都不是个人电脑的概念,而是多人共用的小型中型大型计算机上的概念. 1.终端 一台主机,连很多终端,终端为主机提供了人机接口,每个人都通过终端使用主机的资源. 终端有字符哑终端和图形终端两种. 控制台是另一种人机接口, 不通过终端与主机相连, 而是通过显示卡-显示器和键盘接口分别与主机相连, 这是人控制主机的第一人机接口.