shell编程
来源:互联网 发布:vip影院软件下载 编辑:程序博客网 时间:2024/06/04 23:28
1.shell脚本
****脚本的后缀”.sh”,里面可以写一些命令,直接进到当前目录下“./名.sh”即可运行
脚本text.sh:
#!/bin/bash
echo $1 $2
echo $0
echo $#
echo $@
echo $$
echo $?
注:执行的时候需要加上两个参数,参数之间要用空格分开
在shell脚本的第一行通常需要写上“#!/bin/bash”,这一行指明了此shell脚本使用哪个shell对其进行解释执行。“#”注释的标记
2.shell脚本的执行
①赋予可执行权限
执行操作为:
$ chmod 755 test.sh
$ ./test.sh
②使用特定的shell解释执行:
$ bash test.sh
③使用“.”命令或者“source”
$ . test.sh 或者 $ suorce test.sh
3.交互式脚本
交互式脚本:允许用户在执行的过程中输入数据,脚本根据得到的数据进行相应的操作
在shell脚本中可以使用read命令读取用户输入的变量的值,然后将其赋予一个变量
read命令格式:
read [ -p “字符串”] 变量名
例:
#!/bin/bash
#read program
read -p “Please input your name:” username
echo “Hello ! Your name is $username”
注意:
使用-p进行提示,并且变量名和前面的字符串之间至少有一个空格
4.变量的数值运算
shell定义的变量都是字符串类型,故没办法直接进行算数运算
declare命令可以声明为整形数
例:
$ declare -i num1=10
$ declare -i num2=20
$ declare -i num3=num1+num2
$ echo num3…………………………num3= 30
5.脚本逻辑判断与表达式
shell语言中可以用test进行判断,格式为:$ test 条件 或者 [条件]
test命令能够对条件的执行结果进行判断,并且能够返回真(0)或者假(非0)
例:
判断/etc/passwd是否为一个文件:
$ sudo test -f /etc/passwd ;
对字符串进行判断
判断结果
string1 = string2
判断string1是否等于string2,若相等,返回真
string1 != string2
判断string1是否不等于string2,若不相等,返回真
-z string
判断string长度是否为0,若为0返回真
-n string
判断string长度是否不为0,若不为哦这返回真
对整数进行判断
判断结果
int1 -eq int2
判断两个整数是否相等,若相等,返回真
int1 -ne int2
判断两个整数是否不相等,若不相等返回真
int1 -gt int2
判断int1是否大于int2,若大于返回真
int1 -ge int2
判断int1是否大于等于int2,若是,返回真
int1 -lt int2判断int1是否小于int2,若小于,返回真int1 -le int2判断int1是否小于等于int2,若是,返回真
对文件存在或者类型进行判断
判断结果
-e
判断文件是否存在,若存在返回真
-b
判断文件是否是块设备文件,若是,返回真
-c
判断文件是否是字符设备文件,若是返回真
-f
判断文件是否是普通文件,若是返回真
-d 判断是否是一个目录,若是返回真 -L判断是否是一个链接文件,若是返回真
对文件属性进行判断
判断结果
-s
判断文件是否是空白文件,若是返回真
-r
判断文件是否可读,若是返回真
-w
判断文件是否可写,若是返回真
-x
判断文件是否可执行,若是返回真
-u 判断文件是否设置了SUID,若是返回真 -g判断文件是否设置了SGID,若是返回真 -k判断文件是否设置了sticky bit属性,若是返回真
两个文件比较
判断结果
file1 -nt file2
判断file1是否比file2新,若是返回真
File1 -ot file2
判断file2是否比file1新,若是返回真
逻辑判断
判断结果
条件1 -a 条件2
当条件1和条件2同时为真时,返回真
条件1 -o 条件2
当条件1和条件2只要有一个为真时,返回真
!条件1当条件1为假时,返回真
6.条件判断if语句
格式一:
if [ 条件 ]
then
命令1
命令2
fi
注:
if和“[”之间,条件和左右的括号之间都必须有空格,并且then命令要是和if命令写在同一行,那应该写成:if [ 条件 ] ;then ……
当条件为真时,执行then后的命令,否则直接执行fi后的命令
格式二:
if [ 条件 ] ;then
命令1
命令2
…………
else
命令3
命令4
…………
fi
格式三:
if [ 条件1 ] ;then
命令1
…………
elif [ 条件2 ] ;then
命令2
…………
elif [ 条件3 ] ;then
命令3
…………
else
命令4
…………
fi
注:elif可以嵌套任意多个
7.case命令
case语句可以代替if……elif……fi语句,case基本格式为:
case 变量值 in
值1)
命令1
;;
值2)
命令2
;;
…………
*)
命令3
;;
esac
注:
case执行顺序:首先用变量跟值1比较,若相同执行命令1,否则跟值2比较,若相同执行命令2,以此类推,如果都不相同,则执行默认的命令,即*)内的命令
每个段落内最后都要有两个“;;”结尾,以表示命令结束,并且最后应该使用esac来结尾。
8.循环
bash中有三种循环命令:for循环、while循环、until循环
(1) for……in……循环
for能够根据in后面的变量的数目执行循环,其格式如下:
for 自定义变量 in 变量1 变量2 变量3 ……
do
命令
done
for循环第一次执行循环时,会把变量1的值赋予自定义变量,然后执行do和done之间的命令,当执行完毕后,再把第二个变量赋予自定义变量,然后再执行do和done之间的命令,以此类推,直到for循环结束
(2)while循环
语法格式:
while [ 条件 ]
do
命令1
…………
done
注:
break在这里同样可以结束循环
while循环能够对后面的条件进行判断,当条件为真是,就是执行do和done之间的命令,只到条件为假,退出循环
(3)until循环
until循环正好和while循环相反,是只有当条件为真的时候才退出循环
until 循环的命令格式:
until [ 条件 ]
do
命令1
…………
done
9.脚本调试
$ bash [ -xvn ] 脚本名
-n选项不执行脚本,只检查脚本的语法错误
****脚本的后缀”.sh”,里面可以写一些命令,直接进到当前目录下“./名.sh”即可运行
脚本text.sh:
#!/bin/bash
echo $1 $2
echo $0
echo $#
echo $@
echo $$
echo $?
注:执行的时候需要加上两个参数,参数之间要用空格分开
在shell脚本的第一行通常需要写上“#!/bin/bash”,这一行指明了此shell脚本使用哪个shell对其进行解释执行。“#”注释的标记
2.shell脚本的执行
①赋予可执行权限
执行操作为:
$ chmod 755 test.sh
$ ./test.sh
②使用特定的shell解释执行:
$ bash test.sh
③使用“.”命令或者“source”
$ . test.sh 或者 $ suorce test.sh
3.交互式脚本
交互式脚本:允许用户在执行的过程中输入数据,脚本根据得到的数据进行相应的操作
在shell脚本中可以使用read命令读取用户输入的变量的值,然后将其赋予一个变量
read命令格式:
read [ -p “字符串”] 变量名
例:
#!/bin/bash
#read program
read -p “Please input your name:” username
echo “Hello ! Your name is $username”
注意:
使用-p进行提示,并且变量名和前面的字符串之间至少有一个空格
4.变量的数值运算
shell定义的变量都是字符串类型,故没办法直接进行算数运算
declare命令可以声明为整形数
例:
$ declare -i num1=10
$ declare -i num2=20
$ declare -i num3=num1+num2
$ echo num3…………………………num3= 30
5.脚本逻辑判断与表达式
shell语言中可以用test进行判断,格式为:$ test 条件 或者 [条件]
test命令能够对条件的执行结果进行判断,并且能够返回真(0)或者假(非0)
例:
判断/etc/passwd是否为一个文件:
$ sudo test -f /etc/passwd ;
$ echo $?
test命令运算符列表
判断string1是否等于string2,若相等,返回真
string1 != string2
判断string1是否不等于string2,若不相等,返回真
-z string
判断string长度是否为0,若为0返回真
-n string
判断string长度是否不为0,若不为哦这返回真
判断两个整数是否相等,若相等,返回真
int1 -ne int2
判断两个整数是否不相等,若不相等返回真
int1 -gt int2
判断int1是否大于int2,若大于返回真
int1 -ge int2
判断int1是否大于等于int2,若是,返回真
int1 -lt int2判断int1是否小于int2,若小于,返回真int1 -le int2判断int1是否小于等于int2,若是,返回真
判断文件是否存在,若存在返回真
-b
判断文件是否是块设备文件,若是,返回真
-c
判断文件是否是字符设备文件,若是返回真
-f
判断文件是否是普通文件,若是返回真
-d 判断是否是一个目录,若是返回真 -L判断是否是一个链接文件,若是返回真
判断文件是否是空白文件,若是返回真
-r
判断文件是否可读,若是返回真
-w
判断文件是否可写,若是返回真
-x
判断文件是否可执行,若是返回真
-u 判断文件是否设置了SUID,若是返回真 -g判断文件是否设置了SGID,若是返回真 -k判断文件是否设置了sticky bit属性,若是返回真
判断file1是否比file2新,若是返回真
File1 -ot file2
判断file2是否比file1新,若是返回真
当条件1和条件2同时为真时,返回真
条件1 -o 条件2
当条件1和条件2只要有一个为真时,返回真
!条件1当条件1为假时,返回真
6.条件判断if语句
格式一:
if [ 条件 ]
then
命令1
命令2
fi
注:
if和“[”之间,条件和左右的括号之间都必须有空格,并且then命令要是和if命令写在同一行,那应该写成:if [ 条件 ] ;then ……
当条件为真时,执行then后的命令,否则直接执行fi后的命令
格式二:
if [ 条件 ] ;then
命令1
命令2
…………
else
命令3
命令4
…………
fi
格式三:
if [ 条件1 ] ;then
命令1
…………
elif [ 条件2 ] ;then
命令2
…………
elif [ 条件3 ] ;then
命令3
…………
else
命令4
…………
fi
注:elif可以嵌套任意多个
7.case命令
case语句可以代替if……elif……fi语句,case基本格式为:
case 变量值 in
值1)
命令1
;;
值2)
命令2
;;
…………
*)
命令3
;;
esac
注:
case执行顺序:首先用变量跟值1比较,若相同执行命令1,否则跟值2比较,若相同执行命令2,以此类推,如果都不相同,则执行默认的命令,即*)内的命令
每个段落内最后都要有两个“;;”结尾,以表示命令结束,并且最后应该使用esac来结尾。
8.循环
bash中有三种循环命令:for循环、while循环、until循环
(1) for……in……循环
for能够根据in后面的变量的数目执行循环,其格式如下:
for 自定义变量 in 变量1 变量2 变量3 ……
do
命令
done
for循环第一次执行循环时,会把变量1的值赋予自定义变量,然后执行do和done之间的命令,当执行完毕后,再把第二个变量赋予自定义变量,然后再执行do和done之间的命令,以此类推,直到for循环结束
(2)while循环
语法格式:
while [ 条件 ]
do
命令1
…………
done
注:
break在这里同样可以结束循环
while循环能够对后面的条件进行判断,当条件为真是,就是执行do和done之间的命令,只到条件为假,退出循环
(3)until循环
until循环正好和while循环相反,是只有当条件为真的时候才退出循环
until 循环的命令格式:
until [ 条件 ]
do
命令1
…………
done
9.脚本调试
$ bash [ -xvn ] 脚本名
-n选项不执行脚本,只检查脚本的语法错误
-x选项可以将所有脚本的内容在执行是显示出来
1 0
- shell 以及shell编程
- Shell和Shell编程
- 【shell】shell 编程基础
- Shell及其Shell编程
- Shell编程
- Shell编程
- Shell编程
- shell编程
- Shell编程
- Shell编程
- shell 编程
- Shell编程
- Shell编程
- shell编程
- shell编程
- Shell编程
- shell编程
- Shell 编程
- Swift-边读边记-[1]
- JSP初学整理(二):JSP+JAVABean
- AndroidStudy---搭建后台服务器
- 欢迎使用CSDN-markdown编辑器
- OC 中runtime的理解 以及 使用
- shell编程
- 写在ie6里的点滴
- request,session,application三者关系
- leetcode-25 Reverse Nodes in k-Group
- 全局变量、静态全局变量、局部变量、静态局部变量
- Android多渠道打包解决方案(兰贝壳儿)
- 使用Cardme读取安卓IOS导出的vcf格式通讯录
- Light oj 1037 - Agent 47(状压dp)
- poj 1144 Network 图的连通性-关节点个数