Shell [基础]

目录

Shell

引号

使用流程

变量

内置函数

echo

判断

条件判断

循环

函数


Shell

默认空格隔开

引号

“ ” 双引号 :引号里的内容当作整体来看,可以通过$引用其他变量值

echo "$(hostname)"
echo "$(touch haha)"

‘ ’ 单引号 :不能引用其他变量值,特殊符号会变成普通字符

echo '$(hostname)'
$(hostname)

` 反撇号 : $() ,如果存在嵌套反撇号就没用了

echo `hostname`

打印当前时间(date)

echo "$(date)"
echo "$(date +%Y-%m-%d)"
echo "$(date "+%Y-%m-%d %H:%M:%S“ )”

使用流程

#创建文件
touch qwe.sh (文件名.sh)
#写代码
vim qwe.sh
	#!/bin/bash 
	#注释
	:<<aa
	多行注释
	aa
	str='hi'  (定义一个变量)
	echo $str
	echo 'haha'
chmod 777 qwe.sh(赋予权限)
#执行
./qwe.sh 
. 文件名(空格)
sh 文件名 (空格)

变量

aa=hihihihihi
echo $aa
echo ${aa:2:5}
#从第二个开始截取五个输出,从0开始
aa=`hostname`
echo $aa

只读变量

readonly 变量名
#被定义后,只能读,不能修改

返回字符串长度

qwe=hihihi
ecno $(#qwe)
#6

删除变量

unset aa
  • 当前时间
vim time.sh
	#!/bin/bash
	t=$(date)
	echo $t
chmod 777 time.sh
./time.sh

接受用户变量
read

read -p
#read -p'请输入' name
#echo $name
read -n
#定义字符数量
#read -n6
read -s
#不显示输入的内容
read -t
#定义输入时间,默认单位秒
#read -t6

定义有类型变量
declare

declare -i 变量名
整数
declare -r 变量名
只读

declare -a 变量名
普通数组(下标整数)
#可以一次赋值多个 下标从0开始
declare -a b=(1 2 3 4 5 6)
echo ${b[3]}

declare -A 变量名
关联数组(下标字符串)  
#通过下标去赋值
declare -A b
b[a]=aaa
echo ${b[a]}

declare -x 变量名
通过环境导出
#env | grep 文件名
#查看当前用户环境变量
declare -x date=123
echo $date
123

内置函数

$? 上个命令执行后返回 0就是执行正常True 
   其他数字就是错误或者异常
$0 当前执行的程序或脚本名
#!/bin/bash    #bash
$# 脚本后面的参数个数
# ./qwe.sh q w e r t y u i o p (传进去的参数)
#3
$* 脚本后面所有参数,当作一个整体
#q w e ...
$@ 参数独立,全部输出
#q
#w
#e
#...
$1-$9 脚本后面位置参数 
#q ($1)
${10}-${n} 扩展位置参数
#${10}
#p
$$ 当前进程的进程号
$! 后台运行的最后一个进程号
!$ 调用最后一条命令历史中的参数

echo

转义

不换行 \c
echo -e"hihihi\c"
制表符 \t
echo -e"hihihi\thi"
换行 \n
echo -e"hihihi\nhi"
把结果写进文件 >
echo "hihi" > a.txt

四则运算

+ - * / %
*需要转义\*
$(())  echo $((v1+v2))
$[]    echo $[v1+v2]
expr   expr 6 + 6 #空格
let    n=1;let n+=1 #分号隔开

判断

判断语法格式

test 条件
[ 条件 ]		
[[ 条件 ]]
#在字符串里 = == 都是判断
a='hi'
b='hihi'
[[ $a = $b ]];echo $?

判断文件类型

-e   文件是否存在
test -e 文件名
-f   是否存在并且是个普通文件
-d	 是否存在并且是个目录
-s	 是否存在并且是一个非空文件
-L	 是否存在并且是一个软连接文件
-b	 是否存在并且是一个设备文件
-S	 是否存在并且是一个套接字文件
-c	 是否存在并且是一个字符设备文件
-p 	 是否存在并且是一个命名管道文件

判断文件权限

-r	 当前用户对这个文件是否可读
test -r 文件名
-w	 可写
-x	 可执行
-u   是否有suid,高级权限冒险位
	id -u #返回当前用户id
	#管理员root id=0
-g	 是否有sgid,高级权限强制位
	id -g #返回当前用户组id

判断文件新旧

文件1 -nt 文件2	比较文件1是否比文件2新
文件1 -ot 文件2	比较文件1是否比文件2旧
文件1 -ef 文件2	比较是否位同一文件。

判断大小(整数)

-eq		相等		-ne		不等
-gt		大于		-ge     大于等于
-lt		小于		-le		小于等于

判断字符串

-z	 是否为空字符串,字符串长度是0就行
test -z $str1
-n   是否为非空字符串,字符串长度不是0就行

$str1 = $str2  
	 判断字符串是否相等 
$str1 != $str2  	
	 是否不等

与或

-a  &&	: and
#[1 -eq 1 -a 1 -ne 0]
#[1 -eq 1]&& echo "hihihi"
#[ $(id -u) -eq 0]&& echo "yes"
-o  ||	: or

类c

((1==1));echo $?
((1!=1))
((1>=1))
((1<=1))
((a=666));echo $a
# = 赋值 ==判断

条件判断

if 语句
case 语句

if

if [ 条件1 ]
then
	命令1
elif [ 条件2 ]
then
	命令2
else
	命令
fi
#空格 空格 空格 空格 空格 空格 空格 空格 空格 空格
if [条件];then 命令; fi #单行模式

case

语法结构:
case $变量 in
	条件1)
		命令1
		;;
	条件2)
		命令2
		;;
	条件3)
		命令3
		;;
	*)#else
		默认命令
		;;
esac

循环

for 循环
while 循环
until 循环

continue  继续:
		  #下面代码就不执行了,重头开始。
break	  打断退出循环
exit	  直接退出程序

for

for 变量
do
	命令
done
后面传参
#./for1.sh 1 2 3 4 
for 变量 in {list} #{1..n}
do
	命令
done

{1..10..2} 	#1 3 5 7 9  每次执行+2
seq n #从1打印到n
seq 1 2 10 	#1 3 5 7 9

for v in {1..10};do echo $v;done #命令行模式
i++  先打印再+		
++i  先+后打印

for((表达式1;表达式2;表达式3)) 
	#((i=1;i<=10;i++))
	#初始值;循环条件;迭代条件
do
	命令  #循环体
done

while

循环语句:
i=1  #初始条件
while 表达式 #循环条件
do
	命令  #循环体
	let i++  #迭代条件
done

until
条件为假进入循环,条件为真的时候退出循环

i=1  #初始条件
until 表达式  #循环条件
do
	命令  #循环体
	let i++  #迭代 
done

函数

方便重复使用

格式

function 函数名(){
	命令
}

#!/bin/bash
function ft(){
	read -p '输入数字' f
	f=$[$f*$f]
	echo $f
}
fun #调用函数
-------------------------------------
#!/bin/bash
function ft(){
	f=$[$f*$f]
	echo $f
}
read -p '输入数字1' a
read -p '输入数字2' b
f3 $a $b #= ./ft.sh 1 2

返回值

return 退出函数并返回一个值
#!/bin/bash
function fun(){
	read -p '输入数字' f
	f=$[$f*$f]
	return $a
echo $?  #可以理解为接受返回的东西
}
fun #调用函数

变量范围

 默认是全局变量
local 变成局部变量
#!/bin/bash
function fun(){
	read -p '输入数字' f
	local f=$[$f*$f]
	echo $f 
}
echo $f #没东西输出

调用别的函数
source 路径

source ./fun.sh
source /home/tom/fun.sh #不同地方
#!/bin/bash
function fun(){
	read -p '输入数字' f
	local f=$[$f*$f]
	echo $f 
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值