Linux shell 编程
来源:互联网 发布:ubuntu apt get jdk8 编辑:程序博客网 时间:2024/05/29 23:23
一、 编写shell的格式
1 第一行决定使用哪一种shell
Bash:#! /bin/bash
Python:#! /usr/bin/python
不知道解释器的完整路径,可使用whereis 解释器名称(bash)
2 # …… 表示注释
3 正常的程序体
二、 source . bash sh ./ 执行脚本有啥区别
1 source xxx.sh 等价于 . xxx.sh: 他们是在父进程中执行的,因此各项操作都会在原本的bash环境下生效。所以通过这两种执行的shell 脚本内的变量,在shell脚本执行完毕之后,也是可以查询的。
2 ./ sh 以及 bashxxx.sh :他们是父进程会新开一个子进程,然后,这时候bash环境已经是一个新的bash环境,当子进程结束后,子进程内的变量或操作不会回传到父进程
三、 变量和引用
3.1变量运算符
3.1.1 替换运算符
${var:-word}
var存在且非空,返回var值,否则返回word
${var:+word}
对已赋值的var,重设其值
${var:=word}
var存在且非空,返回var值,否则将var的值赋值为word,然后返回这个值
${var:?word}
如果var存在切非空,返回var值,否则打印
word内容。
[root@localhost nicky]# echo ${endeca?'unknown variable'}
-bash: endeca: unknown variable
[root@localhost nicky]# echo ${endeca:?'unknown variable'}
-bash: endeca: unknown variable
[root@localhost nicky]# endeca="Poweful Search Engine Framework"
[root@localhost nicky]# echo ${endeca:?'unknown variable'}
Poweful Search Engine Framework
root@localhost nicky]# echo ${endeca:='unknown variable'}
Poweful Search Engine Framework
[root@localhost nicky]# echo ${endeca1:='unknown variable'}
unknown variable
[root@localhost nicky]# echo ${endeca1:-'unknown variable'}
unknown variable
[root@localhost nicky]# echo ${endeca2:-'unknown variable'}
unknown variable
3.1.2 模式匹配运算符
变量运算符
说明
${var#pattern}
如果模式匹配变量的开始处,则删除匹配最短部分
[root@localhost nicky]# echo ${var#/*}
opt/endeca/log/file.log
[root@localhost nicky]# echo ${var#/opt}
/endeca/log/file.log
${var##pattern}
如果模式匹配变量的开始处,则删除匹配最长部分
[root@localhost nicky]# echo ${var##/opt}
/endeca/log/file.log
[root@localhost nicky]# echo ${var##/*/}
file.log
${var%pattern}
如果模式匹配变量的结尾处,则删除匹配最短部分
[root@localhost nicky]# echo ${var%*.log}
/opt/endeca/log/file
${var%%pattern}
如果模式匹配变量的结尾处,则删除匹配最长部分
${var/pattern/string}
${var//pattern/string}
1匹配模式最长的部分替换为string
2匹配模式所有匹配部分替换为string
[root@localhost nicky]# echo -e ${path//:/'\n'}所有:替换成换行
3.2变量类型
3.2.1用户变量
用户变量:在shell 脚本定义的变量,分为全局变量和本地变量
默认情况下,都是全局变量,除非显示声明类型是local的,才是局部变量。
语法:varname=value
注意:正确的赋值和变量替换方式
正确:[root@localhost nicky]# str="how are you"
正确:[root@localhost nicky]# str=hello
错误:[root@localhost nicky]# str=hello world
错误:[root@localhost nicky]# str = hello
错误:[root@localhost nicky]# str = "how are you"
报错:-bash: are: command not found
原因:赋值可以不加引号,但是只能是没有空格的字符;如果有空格必须,用双引号引起来;而且=两边不能有空格
删除变量:unset 变量名称
3.2.2位置变量
位置变量即所谓的位置参数:
$0:命令名称
$*:所有的位置参数,不包括$0
$#:未知参数的个数
3.2.3环境变量
环境变量的值适用于所有由登录进程所产生的子进程,定义环境变量的基本格式:
ENVRION-VARIABLE=VALUE #赋值
Export ENVRION-VARIABLE #声明环境变量
四、 测试 退出 判断 操作符
4.1 测试
语法格式:test expression
4.1.1整数比较运算符:
-eq: 等于
-ge: 大于或者等于
-le: 小于或者等于
-gt: 大于
-lt: 小于
-ne: 不等于
4.1.2 字符串比较运算符:
String: string 是否不为空
-n string: string 是否不为空
-z string: string 是否为空
Str1=Str2: str1 是否等于str2
Str1!=Str2: str1 是否不等于str2
4.1.3 文件操作符:
-e file: 文件是否存在
-d file: 文件是否为目录
-f file: 文件是否为普通文件
-r: 文件是否可读
-w: 文件是否可写
-x: 文件是否可操作
-h|-L: 文件是否是连接文件
-s: 该文件是否存在,且为非空白文件
-S: 是否为Socket文件
-nt: 前面的文件是否比后面的文件新
-ot: 前面的文件是否比后面的文件旧
4.1.4 逻辑运算符:
!exp: 是否为false
-a: 表示且
-o: 表示或
4.2 判断
4.2.1 if 判断
if(exp1) then
statement……
elif(exp2) then
statement……
else
statement……
fi
4.2.2 exit
语法:exit status
Status:0-255 之间的数字表示,一般返回该状态的值的同时伴随着脚本的退出,参数被保存到shell变量$?中。
#! /bin/bash
echo -e "input a string:"
read str1
if [ -z "$str1" ] # ; then
then
echo "what you input is null!";
exit 1;
fi
4.2.3 case
case variable in
var1)
……command……
;;
var2)
……command……
;;
*)
……command……
;;
esac
五、循环与结构化变量
5.1 for循环
5.1.1 列表for循环
for variable in {list}
do
statements......
done
5.1.1 不带列表for循环,由用户指定参数和参数个数
for variable
do
statements......
done
5.1.1 c类for循环
for ((exp1; exp2; exp3))
do
statements......
done
5.2 while 循环
5.2.1 计数器控制的while循环
int x=5;
while (("$int" <= 5))
do
echo "$int"
let "$int++"
done
5.2.1 结束标记控制的while循环
echo "please input the num[1-10]:"
read num
while[[ "$num" != 4 ]]
do
if [ "$num" -lt 4 ]; then
echo "Too Small, Try Again"
read num
elif [ "$num" -gt 4 ]; then
echo "Too High, Try Again"
read num
else
exit 0
fi
echo "You are hit the results!"
done
5.2.1 标志控制的while循环
echo "please input the num[1-10]:"
read num
signal=0
while[[ "signal" != 1 ]]
do
if [ "$num" -lt 4 ]; then
echo "Too Small, Try Again"
read num
elif [ "$num" -gt 4 ]; then
echo "Too High, Try Again"
read num
else
signal=1
exit 0
fi
echo "You are hit the results!"
done
5.2.1 命令行控制的while循环
5.3.until循环,直到满足什么才做某事
i=0
until [[ "$i" -gt 10 ]]
do
let "s=i*i"
echo "$i * $i = $s"
let "i++"
done
5.4 select 结构
[root@localhost nicky]# cat > 04.sh << "end"
> #! /bin/bash
> echo "what is you like color?"
> select color in "red" "blue" "black" "green" "orange" "others"
> do
> break
> done
> echo -e "you have selected $color"
> end
[root@localhost nicky]# chmod 777 04.sh
[root@localhost nicky]# ./04.sh
what is you like color?
1) red
2) blue
3) black
4) green
5) orange
6) others
#? 3
you have selected black
[root@localhost nicky]#
- Linux Shell编程
- Linux的shell编程
- linux shell编程摘要
- Linux shell编程
- Linux下Shell编程
- Linux的shell编程
- Linux Shell 编程基础
- Linux的shell编程
- Linux Shell编程(基础教程)
- Linux的shell编程
- Linux的shell编程
- linux Shell编程笔记
- Linux的shell编程
- Linux Shell编程入门
- LINUX/UNIX Shell编程
- linux shell编程总结
- linux Shell编程入门
- linux shell编程
- 安装Python第三方函数库方法
- 【Unity实用小方法】判断贴图是否为透明贴图
- ThreadLocal实现局部变量的多线程同步
- 内存查看器
- Servlet forward & include
- Linux shell 编程
- 用Swift实现一个弹性动画
- 控制台小游戏之俄罗斯方块
- java判断字符串为空的方法
- POCO CMake编译及使用
- java 遍历map
- tabBar点击事件以及返回跟vc的监控方法
- FragmentTabHost实现底部导航菜单
- 别天神