shell入门
来源:互联网 发布:中国石油大学网络认证 编辑:程序博客网 时间:2024/06/03 17:42
1)#!/bin/bash // 表示用bash shell来执行,不写默认是用bash shell 来执行
要先加权限:sudo chmod u+x var.sh
2)变量定义的等号两边不能加空格: var=1
如果有空格,bash会把var当成命令,并且空格是bash脚本命令参数分隔符
3)使用变量值时,需要用$, 比如$var或者${var},如果没有$,默认是字符串
4)得到命令行参数:
echo $0 表示命令本身
echo $1 表示第一个参数
echo $2 表示第二个参数
echo $# 表示有几个参数
echo ${10} 表示第10个参数,注意加{}
5)字符串
var=abcd
var="abcd"
var='abcd' //同样效果,如果中间有空格,应该用下两种
// 双引号里面的可以解析,单引号不行,同php
6)变量的赋值可以通过 ` 等到命令的处理结果
var=`ls *.sh` #var得到所有以sh结尾的文件
7)添加或者修改环境变量
export ENVVAR=abc
export ENVVAR=$ENVVAR:def
echo $ENVVAR
控制语句
1) 四则运算 : + - * /
a=100
b=200
echo `expr $a + $b`
2)类似 -gt, 还有 -ge, -lt, -eq, -ne等...
if [ $a -gt $b ]
then
echo 'a is low then b'
fi
// 字符串比较: = !=
var1=abcd
var2=abcd
if [ $var1 = $var1 ]
then
echo "var1 equal var2"
fi
// 还有 -z -n
if [ -z $var3 ] // -z是为空, -z, -n 判断字符串是否为空, 它俩相反
then
echo 'varr3 is null'
fi
3)文件条件
if [ -d /home/duan ]
then
echo 'dir is exist'
fi
-d 表示文件
-e 表示文件存在
-f 表示普通文件
elif:
if [ $1 -gt 90 ]
then
echo a
elif [ $1 -gt 80 ]
then
echo b
elif [ $1 -gt 70 ]
then
echo c
fi
4)循环
vars="a b c d" // 命令用空格分隔
for i in $vars
do
echo $var
done
var=1
sum=0
while [ $var -le 100 ]
do
sum=`expr $var + $sum`
var=`expr $var + 1`
done
echo $sum
case $1 in
100)
echo '100'
;;
200)
echo '200'
;;
300)
echo '300'
;;
*) #相当于default
echo "other"
;;
esac
模块化
函数:
echo 'out:' $1 #代表外面的命令参数
func()
{
echo $# #函数参数个数
echo $0 #shell的命令
echo $1 #函数的第一个参数
echo $2
return 100 #不能超过255
}
func 100 200 300 400 #函数的调用
#获得最近的函数调用或者执行的脚本返回值
echo $?
文件包含
sub.sh
var=100
echo "in sub.sh var is" $var
main.sh
#普通变量不继承,只在本进程中有效,如是环境变量继承,
var=200
#当使用./sub.sh执行脚本时,其实是fork了一个新的脚本解析器进程去执行了
./sub.sh #fork new process,那么在sub中的变量,只在sub中有效,执行完就没了
echo $var #200
#当使用 . sub.sh 来执行脚本的时候,此时不fork新的进程,或者是用source来执行脚本
输入输出从定向
var=100
printf "%d\n" $var
echo aaa > a.txt #将aaa从定向到a.txt
ls xxx 2> a.txt #将2的标准错误重定向道a.txt中
ls xxx 2> /dev/null #将错误信息定向到黑洞
// >> 则表示以追加的方式写入文件
管道:
ps aux | grep a.out #将前面命令的标准输出定位到后面命令的标准输入
查找文件:grep var(要查找的字符串) io.sh(文件)
xargs和重定向配合,用来将之前命令的输出的每一个元素,作为后面一个命令的参数,进行执行。
所以后面的命令有可能会执行多次。
// 有 xargs 将前面命令的每一行,当做后面命令的参数
find /usr/include/ -name "*.h" | xargs grep "sockaddr_in"
ls | xargs rm
0 0
- shell 入门
- shell入门
- shell入门
- Shell入门
- shell 入门
- shell入门
- shell入门
- shell入门
- SHELL入门
- shell 入门
- shell入门
- shell入门
- shell入门
- shell 入门
- shell入门
- Shell 入门
- shell入门
- Shell入门
- Mac下反编译APK相关资料
- 机器学习-斯坦福课程系列1【基本概念】
- 数据结构实验之链表二:逆序建立链表
- Caffe傻瓜系列(11):caffe中的lr_policy选择
- hibernate常见注解
- shell入门
- 负载均衡
- Atitit 图像处理类库 halcon11 安装与环境搭建attilax总结
- 刘凯stm32教程第10讲总结
- 数据结构实验之链表三:链表的逆置
- testng翻译之五--Test methods, Test classes and Test groups
- HashMap多线程造成了CPU100%,死循环
- 17 - 03 - 25 图解HTTP(29)
- libevent通信库实例