shell学习简单记录

shell学习简单记录


使用vi/vim, 新建文件text.sh , sh为扩展名不影响脚本执行。
#!:告诉系统 使用哪种解释器
echo:向窗口输出文本

#!/bin/bash
echo "Hello World!"

chomod:使脚本具有可执行权限
./:当前目录 执行脚本

chmod +x test.sh
./test.sh

直接运行解释器 参数为脚本文件名

/bin/sh test.sh

定义变量 :your_name=“aniu” (等号左右不能有空格)
for file in $(ls /etc):循环etc 下文件名

your_name="aniu"
for file in 'ls /etc'

$your_name:使用变量

your_name="aniu"
echo $your_name

readonly :修饰变量 变量为只读变量 变量值不可以被修改

your_name="aniu"
readonly your_name

unset :删除变量 (不能删除被readonly修饰的变量)

unset your_name

运行shell时,会同时存在三种变量:

  1. 局部变量
    在脚本或命令中定义
  2. 环境变量
    所有程序,包括shell启动的程序都能访问的环境变量
  3. shell变量
    shell程序设置的特殊变量,保证shell 正常运行

shell 命令行参数

$0 当前脚本文件名
$n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
$# 传递给脚本或函数的参数个数
$*  传递给脚本或函数的所有参数
$@ 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到
$? 上个命令的退出状态,或函数的返回值
$$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID

#!/bin/bash
#!/bin/bash
echo "File Name: $0"
echo "First Parameter : $1"
echo "First Parameter : $2"
echo "Quoted Values: $@"
echo "Quoted Values: $*"
echo "Total Number of Parameters : $#"

shell 字符串
单引号:不能存在变量
双引号:允许变量存在 可以出现转义符

str='string'
str="string\"$your_name\""
str="string"$your_name""
str="string${your_name}"
//获取字符串长度
echo ${#str}//6
//提取字符串
echo ${str:1:4} //trin
//查找‘r’的位置
echo `expr index "$str" r`//2

定义数组

arr_name=(1 2 3)
//单独定义数组分量
arr_name[0]=1
//读取数组元素
your_name=${arr_name[0]}
//使用@符号获取数组所有元素
echo ${arr_name[@]}
//获取数组元素个数
lengh=${#arr_name[@]}

shell 注释

//注释符号
#
//花括号 标记为函数 没有地方调用可以实现 多行注释
{}

chmod +x test.sh
./test.sh 1 2
shell传递参数

//特殊字符处理参数
$#
$*
$$ 脚本运行当前进程号
$! 后台运行的最后一个进程ID号

echo "执行的文件名$0"
echo "第一个参数$1"
echo "第二个参数$2"
echo "参数的个数为$#"
echo "传递参数作为一个字符串显示$*"

shell 基本运算
expr 表达式计算工具
2 + 2 表达式和运算符之间要有空格

+
-
* //注意 *前面加\ (反斜杠)
/
%
=
==
!=
sum=`expr 2 + 2`
echo "两数之和:$sum"
mul=`expr 2 \* 2`
echo "两数之积:$mul"
if [ 2 == 2 ]
then 
	echo "2 等于 2"
fi
if [ 2 != 3 ]
then 
	echo "2 不等于 3"
fi

关系运算符

-eq 相等
-ne 不相等
-gt 大于
-lt 小于
-ge 大于等于
-le 小于等于
if [ 2 -le 3 ]
then 
	echo "2 小于等于 3"
fi

布尔运算符

! //非运算
-o //或运算
-a //与运算

逻辑运算

&&
||

字符串运算符

= //字符串是否相等
!= //两个字符串是否不相等
-z //字符串长度是否为 0
-n //字符串长度是否不为0
str //字符串是否不为空

文件测试运算符

-b file //是否块设备文件
-c file //是否字符设备文件
-d file //是否目录
-f file //是否普通文件
-g file //是否设置了SGID位
-k file //是否设置了粘着位Sticky Bit
-p file //是否有名管道
-u file //是否设置SUID位
-r file // 是否可读
-w file //是否可写
-x file //是否可执行
-s file //是否为空
-e file //是否存在
file="/var/www/aniu/text.sh"
if [ -r file ]
then
	echo "file 可读"
else 
	echo "file 不可读"
fi

read : 从标准输入读取

#! /bin/bash
read name
echo "$name is a test"
//-e 开启转义
echo -e "OK \n"
//-c 不换行
echo -e "OK \c"
//显示结果定向直文件
echo "aniu" >myfile
//显示当前日期
echo `date`
//[]中执行基本运算 不能有空格
result=[2*5]
if con1
then
	com1
elif con2
 	com2
else
	comN
fi

//for循环
for var in item item2
do
	com1
done
//while循环
while con1
do
	com1
done
	例子case......
#!/bin/sh
int=1
while(( $int<=5 ))
do
	echo $int
	//bash let 命令
	let "int++"
done
	例子case.....
#!/bin/bash
a=0
until [ ! $a -lt 10 ]
do
	echo $a
	a=`expr $a + 1`
done
//case
echo "输入1到5之间的数字"
echo "输入的数字为:"
read aNum
case $aNum in
	1) echo "选择1"
	;;
	2) echo "选择2"
	;;
	*) echo "没有输入"
	;;
esac
//跳出循环
#!/bin/bash
while :
do
	echo -n "输入1-5"
	read aNum
	case $aNum in
		1|2|3) echo "输入:$aNum"
		;;
		*) echo "结束"
		break
		;;
	esac
done

shell 函数

#!/bin/bash
# author:菜鸟教程
# url:www.runoob.com

funWithReturn(){
    echo "这个函数会对输入的两个数字进行相加运算..."
    echo "输入第一个数字: "
    read aNum
    echo "输入第二个数字: "
    read anotherNum
    echo "两个数字分别为 $aNum 和 $anotherNum !"
    return $(($aNum+$anotherNum))
}
funWithReturn
//$? 获取返回值
echo "输入的两个数字之和为 $? !"
-----------------------------------
#!/bin/bash
# author:菜鸟教程
# url:www.runoob.com

funWithParam(){
    echo "第一个参数为 $1 !"
    echo "第二个参数为 $2 !"
    echo "第十个参数为 $10 !"
    //n>=10 用${n}获取参数
    echo "第十个参数为 ${10} !"
    echo "第十一个参数为 ${11} !"
    echo "参数总数有 $# 个!"
    echo "作为一个字符串输出所有参数 $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73

#关闭所有java进程
ps -ef|grep java|grep -v “grep”|awk ‘{print $2}’|xargs kill -9
在windows下编辑然后上传到linux系统里执行的。.sh文件的格式为dos格式
vi test.sh
:set ff=unix

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值