linux之shell记录

shell属于一种很容易学习的程序设计语言,依赖于功能强大的命令可以编写提高开发效率的脚本。这里记录一下常用的shell相关的知识点。 持续更新中。。。

1、在linux或mac中查看使用的shell

echo $SHELL
/bin/bash

shell是一种脚本语言,就会有解释器来执行这些脚本。

Unix/Linux上常见的Shell脚本解释器有bash、sh、csh、ksh等,习惯上把它们称作一种Shell。我们常说有多少种Shell,其实说的是Shell脚本解释器。

2、shell脚本调试

 在编写好的脚本运行时可能会报错,具体会提示哪行有错,通过vim进行命令行模式,

输入 :set nu 会显示代码行,再输入 报错行 + 回车就会定位到报错的行。

:set nu

3、shell执行方式

在linux系统的桌面上创建了一个demo.sh,用来测试 ,sh的权限在移动过程中可能会更改,这个要注意下。

#!/bin/bash

echo shell

exit 0
绝对路径和相对路径(./)

/home/tsc/Desktop/demo.sh 

./demo.sh (./ 和 sh之间不要用空格)

sh 和 bash 

sh demo.sh

bash demo.sh

source 和 .

. demo.sh(.和sh之间有空格)

source demo.sh

  • ./shbash三种执行脚本的方式都是重新启动一个子shell,在子shell中执行脚本.
  • source 和 . 两种执行方式都是在当前shell进程中执行脚本
  • 如果脚本最后写了exit 命令,用 . source执行完成之后会退出终端,其它方式不会

4、相关概念

  • usr 是 Unix System Resource的缩写
  • /usr/bin 文件夹下是系统预装的可执行程序,会随着系统升级而改变
  • /usr/local/bin目录是给用户放置自己的可执行程序的地方,推荐放在这里,不会被系统升级而覆盖同名文件。
  • 如果两个目录下有相同的可执行程序,/usr/local/bin优先于/usr/bin受到PATH环境变量的影响

5、每个shell 最好写上exit 

        写上exit 主要是为了防止别的shell脚本引用当前的脚本,需要判断当前脚本的执行状态

6、脚本参数相关

./para.sh 1 3   ===== 脚本执行 ,传入两个参数

#!/bin/bash

echo "\$@:$@"
echo "\$0:$0"
echo "\$1:$1"
echo "\$2:$2"
echo "\$#:$#"

echo "==============\$@"
for i in $@
do
	echo $i
done

echo "==============\$*"
for i in $*
do
	echo $i
done

echo "==============\"\$@\""
for i in "$@"
do
	echo $i
done

echo "==============\"\$*\""
for i in "$*"
do
	echo $i
done
exit 0

输出结果: 

//===========输入
./para.sh 1 2
//===========输出
$@:1 2
$0:./para.sh
$1:1
$2:2
$#:2
==============$@
1
2
==============$*
1
2
=============="$@"
1
2
=============="$*"
1 2

$@脚本的所有参数集合
$*脚本的所有参数集合
$#参数的个数
$$当前进程号pid
$?上个命令的退出状态,或函数的返回值
$0指当前脚本以及脚本路径
$1脚本中的第一个参数
$2脚本中的第二个参数,依次类推 $n

$@、$*、 “$@” 、"$*" 几种格式,只有 “$*” 会将参数合并成一行,其它都会将参数分开(见输出结果)。

7、$ 和 ${}

都可以用来引用变量,${ }可以指定变量边界,尤其是在变量是其它名字的一部分时要加上{}

i=1

echo $i
#下面不会输出 
# echo $i_name
echo ${i}_name

8、[ ]与test

[] 是test命令的一种简写形式

if test -f /var/log/apport.log
等价于
if [ -f /var/log/apport.log ]

9、$[ ] 和 $(( ))

$[] 是用来进行数学运算的,支持+-*%/。效果同$(())

a=2
b=3
echo $[$a+$b]
echo $(($a+$b))

10、[[ ]]

[ $score -le 100 ] && [ $score -gt 85 ] 等价于 [[ $score -le 100  &&  $score -gt 85 ]] ,双中括号之间不要有空格,[[ ]] 是shell中的关键字,不是命令,单中括号[],是test命令

11、(())
 

使用场景有如下:

  • $(())
  • 在for循环命令中控制循环,类似于c语言
  • 改变变量的值,且不需要$引用

改变变量的值如下

i=0

let i++
i=$i+1
((i++))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

俯仰一世_1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值