Linux系统Shell脚本编程
1. shell脚本概念:C语言编写的、命令解释器、编程语言。
是用户使用linux的桥梁。
shell脚本语言非常擅长处理文本类型的数据。
2. shell脚本作用:自动化管理、监控管理、日志数据处理、自动数据备份。
3. shell脚本中的成分:注释、命令、shell变量、结构控制语句。
以行为单位 一行一行依次执行。
(在shell脚本中可以出现任何在交互方式下可以使用的命令。)
4. 调用shell脚本的两种方式:
(1)sh 脚本文件名
(2)./脚本文件名(需要有执行权限)
当执行一个脚本文件时shell会产生一个子shell(即一个子进程)去执行命令文件中的命令。
5. Shell脚本编码规范:
一个bash脚本的正确的起始部分应该以#!开头,如:#!/bin/bash。在调用bash脚本的时候,以#!开头的语句通知系统使用何种解释器来执行脚本。
6. shell变量:
shell变量用于表示字符串、数值。
命名规范:
(1)首个字符必须为字母(a-z,A-Z) 或者_;
(2)中间不能有空格,可以使用下划线(_);
(3)不能使用其他标点符号。
变量赋值:变量名=值(赋值符号“=”两边不能有空格,否则将视为命令。)
注:shell的默认赋值是字符串赋值,要进行数字赋值要加“(())”。
引用变量的值:在变量名前面加一个“$”。
注:变量赋值的时候一定不能在前面加“$”。
示例:
v1=centos
echo $v1
为避免变量名和其他字符混淆要给变量名加上“{}”。
示例:
num=2
echo “This is the ${num}nd”
7. 数字的运算:
shell数值运算都是通过(())来计算的。
幂运算表示:**
示例:
a=10
b=20
echo $(($a+$b))
关系比较运算如果出现在中括号中则要使用-eq、-ne、-gt、-ge、-lt、-le等代替。
8. shell变量表达式:
${#string}:计算字符串的长度。
${string:position}:从位置position开始提取字符串。
${string:position:length}:从位置position开始提取长度为length的子串。
${string#substring}:从开头删除最短匹配子串。
${string##substring}:从开头删除最长匹配子串。
${string%substring}:从结尾删除最短匹配子串。
${string%%substring}:从结尾删除最长匹配子串。
使用实例:
${string#I*.}:删除I到.的所有字符(最短匹配)。
${string##I*.}:删除I到.的所有字符(最长匹配)。
9. 判断:
(1)test:
-f:文件是否存在
-d:目录是否存在
-r:文件是否有读权限
-w:文件是否有写权限
-x:文件是否有执行权限
-n:判断变量是否有值
-z:测试字符串是否为空串
示例:
filename=/home/wjt
test -f $filename && echo ‘exit’ || echo ‘not exit’
(2) []:
在中括号中必须都要使用空格来分隔
在中括号中的变量最好都要以双引号括起来
在中括号中的常量最好都以单引号括起来
示例:
[ “$a” == ”$b” ] && echo ‘yes’ || echo ‘no’
[ ‘12’ == ’10’ ]
(3)if-else多分支判断:
示例:
echo ‘Please input your hardware:’
read hd
if [ $hd == cpu ]; then
echo ‘Your cpu info is:’
cat /proc/cpuinfo
elif [ $hd == mem ]; then
echo ‘Your memory info is:’
cat /proc/meminfo
elif [ $hd == hard ]; then
echo ‘Your harddisk info is:’
df -h
else
echo ‘Wrong input’
fi
(4)case多分支判断:
示例:
echo ‘Please input an number’
read number
case $number in
1)
echo ‘Your input number is 1’;;
2)
echo ‘Your input number is 2’;;
3)
echo ‘Your input number is 3’;;
*)
echo ‘Wrong input’;;
esac
(5)select语句:让用户从一组不同的值中选择一个。
select表达式是bash的一种扩展应用,用于交互式场合。
示例:
#!/bin/bash
echo “Select a kind of fruit as your favorite:”
select fruit in “apple” “banana” “persimmon”; do
break;
done;
echo “Your favorite fruit is $fruit!”
10. 循环操作:
(1)while:
示例:
i=10
while (($i>5)); do
echo $i;
((i--));
done;
(2)until:
示例:
a=10
until [ $a -lt 0 ]; do
echo $a;
((a--));
done;
(3)for:
示例:
for((i=1;i<10;i++)); do
echo $i;
done;
注:while循环和until循环的区别:while循环在条件成立时执行;而until循环则在条件不成立时执行。
11. 函数(方法):
示例:
#!/bin/bash
function print()
{
echo “The number you input is $1”;
}
echo “Please input your number:”
read number;
case $number in
“one”)
print 1;;
“two”)
print 2;;
“three”)
print 3;;
*)
echo ‘wrong input’;;
esac
12. 引号:
在向程序传递任何参数之前,程序会扩展通配符和变量,即程序会把通配符替换成适当
的文件名,把变量替换成变量值。使用引号可以防止这种扩展。
单引号和双引号都可以防止通配符“*”的扩展。
双引号允许变量扩展,而单引号则可以防止变量扩展。
此外还可以使用转义字符“\”来防止通配符和变量名的扩展。
13. Here Document:
Here document用于将几行文字传递给一个命令。
Here document以“<<”开头,后面接上一个字符串,这个字符串还必须出现在here
document的末尾,中间则是要传递给命令的文字。
示例:
#!/bin/bash
#This programe receives three numbers and output the biggest one.
If [ $# -ne 3 ]; then
cat << HELP
This command requires three params.
Usage example: biggest 1 2 3.
HELP
exit 0
fi
a=”$1”
b=”$2”
c=”$3”
shift
shift
shift
if [ $a -gt $b ]; then
bigger=$a
else
bigger=$b
fi
if [ $bigger -gt $c ]; then
biggest=$bigger
else
biggest=$c
fi
echo $biggest
14. 命令行参数:
用户从命令行输入的参数可以在shell脚本中访问。
$#:表示参数个数
$@:表示所有参数列表
$*:表示所有单数列表
$n:表示第n个参数
$0:当前脚本的文件名
Linux系统Shell脚本编程的更多相关文章
- Linux系统——shell脚本
shell脚本编程 作用:通过命令行解析的方式,自动执行设定好的程序或命令代码.(若将脚本挂到定时任务中,就会自动在非工作时间里自动触发执行程序) Shell脚本文件以“.sh”结尾 规范的Shell ...
- 【Linux】Shell脚本编程(一)
Linux shell脚本编程: 守护进程,服务进程:启动?开机时自动启动: 交互式进程:shell应用程序 广义:GUI,CLI GUI: CLI: 词法分析:命令,选项,参数 内建命令: 外部命令 ...
- [Linux系统] (4)脚本编程
一.bash shell 可以理解为一种解释器和启动器,解释命令文本,并执行命令. 命令来源: 用户交互输入 文本文件输入 1.示例,写一个最简单的文本 vi test.txt 写入以下内容: ech ...
- 【Linux】Shell脚本编程(三)
流程控制: 循环语句:for,while,until while循环: while CONDITION; do 循环体 done 进入条件:当CONDITION为“真”: 退出条件:当CONDITIO ...
- Linux系统——shell脚本应用示例
传入一个网段地址,自动找出本网段内存活的IP地址.2,将存活的IP地址当作密码来创建Linux用户,用户名格式为:你的名字_数字 3,有几个存活IP地址,就自动创建几个用户 4,最后将创建的用户名 ...
- 【Linux】Shell脚本编程(二)
练习:求100以内所有偶数之和; 使用至少三种方法实现; 示例1: #!/bin/bash # declare -i sum=0 #声明一个变量求和,初始值为0 for i in $(seq 0 2 ...
- shell脚本编程基础介绍
Linux系统——shell脚本编程基础介绍 1.什么是shell 它是一个命令解释器,在linux/unix操作系统的最外层,负责直接与用户对话,把用户的输入解释给操作系统,并处理各种操作输出的结果 ...
- Linux shell脚本编程(三)
Linux shell脚本编程 流程控制: 循环语句:for,while,until while循环: while CONDITION; do 循环体 done 进入条件:当CONDITION为“真” ...
- Linux Shell脚本编程的注意事项
Linux下(Shell脚本 http://www.jbxue.com/jb/shell/)编程的一些注意事项,如编程风格.命名风格等. 一.常用技巧 ssh user@server bash < ...
随机推荐
- DAU新解
写在回归之时 --------------------------- 抱歉,已经超过三年没有回到这里了. 浮躁,虚荣,一颗心没有落到地上,也没有好好总结一下自己.怀念最开始那个时候的状态,安静的做点事 ...
- java命令行执行带依赖jar包的main函数
有时候客户端没有运行环境,需要将程序放到服务器上执行,可按如下操作: 1.创建libs文件夹,将运行过程中依赖的jar包全部拷贝到此处; 2.编译.执行 javac -Djava.ext.dirs=l ...
- java向前引用
根据看书和看得文章,引出了一个关于"向前引用"的问题: public class InstanceInitTest { static { // { a = 6; System.ou ...
- OpenJudge_1321:棋盘问题
题目描述 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆 ...
- Eddy's爱好 hdu2204
Eddy's爱好 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- Manacher’s Algorithm (神啊)
(转载自)http://blog.csdn.net/hopeztm/article/details/7932245 这里描述了一个叫Manacher’s Algorithm的算法. 算法首先将输入字符 ...
- MySQL之最基本命令
前言:以下是数据库最基础最常用的命令,特别适用初学者练习,希望通过不断练习这些命令来熟练操作.巩固基础,因为只有不断地练习才能将知识真正变成自己的东西. 快速查看以下内容: 操作 命令 创建数据库 C ...
- cnblog排版
记录一些自己写博客中的排版技巧 一.标题 红色部分代码用在标题的CSS样式中 <p style="background: gray; font-size: 18px; font-fam ...
- ubuntu系统如何屏幕截图
我们知道,windows下有很多截图的软件和插件,那么在ubuntu系统下我们该怎样截图呢? 下面就让小编来告诉你几种简单的方法吧. 工具/原料 ubuntu系统电脑 方法一: 1.也许很多朋友都知道 ...
- HDU3844Tour (好题)
题意: 有N个点,M个单向边,现在要你设计N条路线覆盖所有的点,每个点都属于且值属于一个环.(为什么是N条边:和最小生成树为什么有N-1条边是一样的证明). 解析: 每个点都有一个喜欢对象(出度 ...