脚本的后缀还是写 .sh 虽然不是必须,但一眼看见易于知晓是脚本
shell简单的说就是一个命令解释器,用于用户和linux内核的沟通。
shell中所执行的命令相当于fork出的子进程一样。
建立脚本。
#!/bin/bash 符号#!用来告诉系统它后面的参数是用来执行该文件的程序,bash脚本第一句都是这个,他会让系统指定以bash来解释这个脚本
Xxxx //脚本内容
chmod 777 file之后就可以执行了
1.基础
# //shell脚本注释符号
二:变量
1.变量种类:
linux下变量类型只有两种
数字型 和字符串型
2.声明变量
declare varname
声明一个局部变量varname,也可以一次声明多个同类型的变量
declare var1 var2 var3
仅创建变量的程序能使用的变量是时局部变量
export varname2
保留字export使得变量可由环境存取。即这个变量可以和系统中的其他程序共享。
????这里不会
3.变量赋值,引用变量时前面要加" $ "
将数值赋给变量,可以不声明变量直接赋值如
let var=1000
*注意:等号两端不能有空格
let后面不加&号???待
比如 i++ :
delcare i=1
let i=”$i+1"
将字符串赋给变量
必须先声明变量,且赋值在同一条语句,赋的值必须用双引号引起
declarevar="100-100-100"
echo $var
HOME="/home" //注意赋值不要有空格
HOME_LIST=$(ls /home) //把命令的执行结果赋值给变量
ehco $HOME //$ 符号是获得变量HOME的值
系统变量:
$0 这个程序的执行名字
$n 这个程序的第n个参数值,9
$* 这个程序的所有参数
$# 这个程序的参数个数
$$ 这个程序的PID
$! 执行上一个背景指令的PID
$? 上一个指令的返回值
4环境变量
由export关键字处理过的变量叫做环境变量。我们不对环境变量进行讨论,因为通常情况下仅仅在登录脚本中使用环境变量。
由export关键字处理过的变量叫做环境变量。我们不对环境变量进行讨论,因为通常情况下仅仅在登录脚本中使用环境变量。
三:运算符
1.linux有三类运算符:
算术运算符:+ -* / %
逻辑运算符:! && ||
比较运算符
算术运算符:
let sum=“$a + $b"
注意:等号两边没空格 加号两边有空格。且有关键字 let 不然sum是字符算100 + 200的形式。
逻辑运算符:
比较运算符:
-eq:等于
-ne:不等于
-gt:大于
-ge :大于等于
-lt:小于
-le:小于等于
let a=1000
let b=400
let b=400
文件比较运算符
-e filename 如果 filename 存在,则为真 [ -e /var/log/syslog ]
-d filename 如果 filename 为目录,则为真 [ -d /tmp/mydir ]
-f filename 如果 filename 为常规文件,则为真 [ -f /usr/bin/grep ]
-L filename 如果 filename 为符号链接,则为真 [ -L /usr/bin/grep ]
-r filename 如果 filename 可读,则为真 [ -r /var/log/syslog ]
-w filename 如果 filename 可写,则为真 [ -w / ]
-x filename 如果 filename 可执行,则为真 [ -L /usr/bin/grep
filename1 -nt filename2 如果 filename1 比 filename2 新,则为真 [ /tmp/install/etc/services -nt /etc/services ]
filename1 -ot filename2 如果 filename1 比 filename2 旧,则为真 [ /boot/bzImage -ot arch/i386/boot/bzImage ]
字符串比较运算符 (请注意引号的使用,这是防止空格扰乱代码的好方法)
-z string 如果 string 长度为零,则为真 [ -z "$myvar" ]
-n string 如果 string 长度非零,则为真 [ -n "$myvar" ]
string1 = string2 如果 string1 与 string2 相同,则为真 [ "$myvar" = "one two three" ]
string1 != string2 如果 string1 与 string2 不同,则为真 [ "$myvar" != "one two three" ]
if [ $a -gt $b ]
注意空格 【 】也需要空出来
貌似除了=号不需要
3.if语句
if [ "22" -lt "33" ] then //注意空格
echo "22 less than 33"
else
echo "no"
fi //if语句的结束
4.case语句
case:把保留字case右边的值和比括号左边的值比较
case $varname in
value1) //数字判断直接是1) 字符串判断写“1”)
.......
;; //!!两个分号不能省略,作为一种情况的结束。
value2)
.....
;;
*) //相当于default:默认执行的
....
esac
echo "enter a number"
read ans //读取一个变量read
case $ans in
1)
echo "you numer is $ans"
;; //注意符号是两个 ;
2)
echo "you number is 2"
;;
[3-9])
echo "you number is $ans"
;;
*) //*通配符
echo "others"
esac
3.while语句
while [ ....]
do
....
done
4.forin循环
for friend in xdw xdw2
do
...
done
另外使用break 跳出循环
使用cotinue到达循环的开始
6.bash中几种循环
6.1. for name [ in word ] ; do list ; done
6.2. for (( expr1 ; expr2 ; expr3 )) ; do list ; done //注意有2层括号
6.3 while [expr] do list; done
其中list简单说就是一串由操作符(operator ;、&、&&、||)
分各给出一个简单例子:
1.
for filename in $(ls)
do
cat $filename
done
2.
for((i=0; i<10; i++))
do
echo $i
done
3.
x=1
sum=0
while [ $x -le 10 ] //注意[ ] 两边的空格
do
let sum=sum+$x //shell中算术计算使用let
let x=x+1
done
echo $sum
4.函数
函数定义格式
function functionname
{
command;
command;
}
函数内部$1 表示传入的第一个参数, $2 表示传入的第二个参数
使用参数之前要先验证传入参数的个数正确与否
$# 表示传入参数个数的总数。
函数内部 return 数字作为返回值
函数体外 $? 表示上一个函数返回的返回值
五:用户交互
1、clear 是清屏
2.readvarname
将键盘输入的内容保存到变量varname中,默认为字符串。
3.数据正常时流向屏幕,显示在屏幕上。改变数据的正常流向,将其流向其他地方,比如文件中。这个过程叫重定向。
标准输入:键盘
标准输出:屏幕
从文件获取内容也叫重定向。<
echo “hello,xdw”将正常输出到屏幕上。
echo “hello,world" > xdw.dat
大于号(>)将内容输出到xdw.dat这个文件中去。
1.若文件不存在,则创建一个新的文件。
2.若文件存在,则替换掉文件的原有内容。
echo ”hello ,xdw" >>xdw.dat
双大于号将内容输出到xdw.dat这个文件中,但是是将内容添加到文件的末尾,而不清除原有数据。
所以使用双大于号。文件不存在的时候同样会创建文件。
2> :将所有的错误信息重定向到一个文件中去。
(自己sb了。
之前问彬哥log信息在屏幕上刷的太快看不到怎么办- -。。。彬哥很惊奇的回答我:重定向到文件啊
他觉得很简单的东西我竟然不知道。。。。)
4。显示存入文件中数据
cat filename
cat:是一个实用程序三大功能:
1一次显示整个文件。
cat filename
2.从键盘创建一个文件。
cat > filename
只能创建新文件,不能编辑已有文件.ctrl+c完成文件的创建。
3.将几个文件合并为一个文件。
cat file1 file2 > file
linux循环执行命令脚本
1一次显示整个文件。
cat filename
2.从键盘创建一个文件。
cat > filename
只能创建新文件,不能编辑已有文件.ctrl+c完成文件的创建。
3.将几个文件合并为一个文件。
cat file1 file2 > file
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论