shell编程基础
Posted Jazz-消逝
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell编程基础相关的知识,希望对你有一定的参考价值。
1.1 shell编程基础
1.1.1 Shell编程所需的基础知识
熟练使用vim编辑器
熟悉SSH终端
熟练掌握linux常用命令
数量掌握linux正则表达式及三剑客命令(grep、sed、awk)
/etc/init.d/functions
1.1.2 变量分类
用一个固定的字符串,替代更多更复制的内容
局部变量(普通变量):
必须以字母或下划线开头 字母、数字、下划线组成
规范的变量名写法定义:见名知意
驼峰语法:首个单词字母小写,其余单词字母大写 oldboyAgeSex=1
[root@oldboy files]# week=6
[root@oldboy files]# echo $week
6
全局变量(环境变量):
大写,linux里面哪里都可以用
在创建他们的Shell及其派出来的子Shell中使用
与用户环境变量有关的文件 目录
全局环境变配置文件
/etc/profile /etc/bashrc /etc/profile.d用户登录到系统 会运行这个目录下面的脚本 以.sh结尾
用户环境变量配置文件
~/,bash_profile ~/.bashrc
特殊变量:
$ 数字
$0 脚本名字
$1 命令行脚本的第1个参数
$2 命令行脚本的第2个参数
$3 命令行脚本的第3个参数
$4 命令行脚本的第4个参数
$# 脚本的参数的数量
$? 上一个命令的执行结果 0正确 非0错误
#!bin/bash
a=$1
b=$2
awk -vnum1=$a -vnum2=$b \'BEGIN{print num1+num2}\'
awk -vnum1=$a -vnum2=$b \'BEGIN{print num1-num2}\'
awk -vnum1=$a -vnum2=$b \'BEGIN{print num1*num2}\'
awk -vnum1=$a -vnum2=$b \'BEGIN{print num1/num2}\'
[root@oldboy files]# sh num.sh 10 20
30
-10
200
0.5
1.1.1 Shell编程所需的基础知识
熟练使用vim编辑器
熟悉SSH终端
熟练掌握linux常用命令
数量掌握linux正则表达式及三剑客命令(grep、sed、awk)
/etc/init.d/functions
1.1.2 变量分类
用一个固定的字符串,替代更多更复制的内容
局部变量(普通变量):
必须以字母或下划线开头 字母、数字、下划线组成
规范的变量名写法定义:见名知意
驼峰语法:首个单词字母小写,其余单词字母大写 oldboyAgeSex=1
[root@oldboy files]# week=6
[root@oldboy files]# echo $week
6
全局变量(环境变量):
大写,linux里面哪里都可以用
在创建他们的Shell及其派出来的子Shell中使用
与用户环境变量有关的文件 目录
全局环境变配置文件
/etc/profile /etc/bashrc /etc/profile.d用户登录到系统 会运行这个目录下面的脚本 以.sh结尾
用户环境变量配置文件
~/,bash_profile ~/.bashrc
特殊变量:
$ 数字
$0 脚本名字
$1 命令行脚本的第1个参数
$2 命令行脚本的第2个参数
$3 命令行脚本的第3个参数
$4 命令行脚本的第4个参数
$# 脚本的参数的数量
$? 上一个命令的执行结果 0正确 非0错误
#!bin/bash
a=$1
b=$2
awk -vnum1=$a -vnum2=$b \'BEGIN{print num1+num2}\'
awk -vnum1=$a -vnum2=$b \'BEGIN{print num1-num2}\'
awk -vnum1=$a -vnum2=$b \'BEGIN{print num1*num2}\'
awk -vnum1=$a -vnum2=$b \'BEGIN{print num1/num2}\'
[root@oldboy files]# sh num.sh 10 20
30
-10
200
0.5
1.1 shell条件表达式
判断 /oldboy 目录是否存在 如果存在 显示 dir exist
[root@oldboy /]# ls -d /oldboy/ && echo dir exist
/oldboy/
dir exist
条件表达式: -d 目录是否存在 -f 文件是否存在
[root@oldboy /]# [ -d /oldboy ]
[root@oldboy /]# echo $?
0
[root@oldboy /]# [ -f /etc/hostsa ]|| touch /etc/hostsa
[root@oldboy /]# ll /etc/hostsa
-rw-r--r--. 1 root oldboy 0 Jun 2 17:09 /etc/hostsa
[ 1 -eq 1 ]
-eq equal ==
-ne not equal !=
-gt great than >
-ge great equal >=
-lt less than <
-le less equal !<
1.2 if语句
#单分支的判断
if [ 如果你是高富帅 ];then
你可以迎娶白富美 灰姑娘 ... 随便挑选
fi
[root@oldboy scripts]# cat cal.sh
#!/bin/bash
a=$1
b=$2
if [ $# -ne 2 ];then
echo "Usage $0 num1 num2"
exit
fi
awk -vnum1=$a -vnum2=$b \'BEGIN{print num1+num2}\'
awk -vnum1=$a -vnum2=$b \'BEGIN{print num1-num2}\'
awk -vnum1=$a -vnum2=$b \'BEGIN{print num1/num2}\'
awk -vnum1=$a -vnum2=$b \'BEGIN{print num1*num2}\'
#双分支的判断
if [ 如果你是高富帅 ];then
你可以迎娶白富美 灰姑娘 ... 随便挑选
else
只要是个女的就行
fi
#输入两个数字
#比较两个数字的大小
# a > b 显示 a bigger than b
#a <= b 显示 a less equal b
#if [第1个数字 大于 第2个数字 ];then
#显示 $oldboy > $lidao
#否则
#显示 $oldboy <= $lidao
#fi
[root@oldboy scripts]# cat compare.sh
#!/bin/bash
oldboy=$1
lidao=$2
if [ $# -ne 2 ];then
echo "Usage:$0 num1 num2:"
exit
fi
if [ $oldboy -gt $lidao ];then
echo "$oldboy bigger than $lidao"
else
echo "$oldboy less equal $lidao"
fi
1.3 read交互模式
[root@oldboy scripts]# read -t 5 -p "input password:" a b -t停留时间 –p显示input password
input password:10 20 –s不显示内容
[root@oldboy scripts]# echo $a $b
10 20
[root@oldboy files]# cat a.sh
#!/bin/bash
read -p "输入内容: " a b
if [ $a -gt $b ];then
echo "$a > $b"
elif [ $a -eq $b ];then
echo "$a = $b"
else
echo "$a < $b"
fi
[root@oldboy files]# sh a.sh
输入内容: 20 10
20 > 10
[root@oldboy files]# sh a.sh
输入内容: 20 20
20 = 20
[root@oldboy files]# sh a.sh
输入内容: 10 20
10 < 20
1.4 for循环
for in do done
[root@oldboy files]# for lidao in 3 2 1 6 5 4
> do
> echo $lidao
> done
3
2
1
6
5
4
[root@oldboy files]# for n in {01..7}; do echo zhao,${n}week ${n}group take you to 大保健,find ${n}woman.; done
zhao,01week 01group take you to 大保健,find 01woman.
zhao,02week 02group take you to 大保健,find 02woman.
zhao,03week 03group take you to 大保健,find 03woman.
zhao,04week 04group take you to 大保健,find 04woman.
zhao,05week 05group take you to 大保健,find 05woman.
zhao,06week 06group take you to 大保健,find 06woman.
zhao,07week 07group take you to 大保健,find 07woman.
优化linux开机启动项目,只保留crond rsyslog sshd network sysstat 其他都关闭
[root@oldboy files]# for n in `chkconfig|awk \'!/crond|sshd|network|rsyslog|sysstat/{print $1}\'`;do chkconfig $n off ;done
[root@oldboy files]# chkconfig |sed -nr \'/crond|sshd|network|rsyslog|sysstat/p\'
crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off
network 0:off 1:off 2:on 3:on 4:on 5:on 6:off
rsyslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off
sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
sysstat 0:off 1:on 2:on 3:on 4:on 5:on 6:off
以上是关于shell编程基础的主要内容,如果未能解决你的问题,请参考以下文章