Linux常用命令总结

1.第一个helloword程序
打开文本编辑器(可以使用 vi/vim 命令来创建文件),新建一个文件 test.sh,扩展名为 sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好
命令:vi helloword.sh

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

编辑好后,怎么执行 ?
第一种方法:

sh helloword.sh

第二种方法:

./helloword.sh
但是报错,权限不足,当你输入./hell时也没有自动提示
-rw-------. 1 root root  997 318 2020 anaconda-ks.cfg
-rw-r--r--. 1 root root   34 919 08:55 hellword.sh
drwxr-xr-x. 2 root root 4096 918 18:33 myslq
[root@localhost ~]# ./hellword.sh
-bash: ./hellword.sh: 权限不够

解决方法:在该文件上加上可执行权限

chmod +x hellword.sh
然后再执行./hellword.sh,发现可以正常执行了,也有自动提示了
-rw-------. 1 root root  997 318 2020 anaconda-ks.cfg
-rwxr-xr-x. 1 root root   34 919 08:55 hellword.sh
drwxr-xr-x. 2 root root 4096 918 18:33 myslq
[root@localhost ~]# ./hellword.sh 
Hello World !

除了显式地直接赋值,还可以用语句给变量赋值,如
查看目录下的文件

#!/bin/bash
for file in `ls /etc`;
#for file in $(ls /root/aaa/bbb);
do
echo $file
done;

使用变量

使用一个定义过的变量,只要在变量名前面加美元符号即可,如:

 #!/bin/bash
myname="吴占喜"
echo $myname
echo ${myname}

变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,比如下面这种情况:

推荐给所有变量加上花括号,这是个好的编程习惯。
 #!/bin/bash
for skill in Ada Coffe Action Java; 
do
    echo "I am good at ${skill}Script"
done

输出结果如下;

I am good at AdaScript
I am good at CoffeScript
I am good at ActionScript
I am good at JavaScript

如果不给skill变量加花括号,写成echo "I am good at s k i l l S c r i p t " , 解 释 器 就 会 把 skillScript",解释器就会把 skillScript"skillScript当成一个变量(其值为空),代码执行结果就不是我们期望的样子了。

I am good at 
I am good at 
I am good at 
I am good at 

已定义的变量,可以被重新定义,如:

#!/bin/bash
myname="科比"
echo ${myname}
myname="吴占喜"
echo ${myname}

输出:

科比
吴占喜

只读变量

使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。
下面的例子尝试更改只读变量,结果报错:

 #!/bin/bash
myname="科比"
readonly myname
myname="wzx"

输出:

test4.sh:4: myname: 只读变量

删除变量
使用 unset 命令可以删除变量。语法:

语法
unset variable_name

 #!/bin/sh
myUrl="https://www.runoob.com"
unset myUrl
echo $myUrl
这种情况下是什么都不会输出的

字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。

单引号字符串的限制:
单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。

双引号的优点:
双引号里可以有变量
双引号里可以出现转义字符

your_name="runoob"
# 使用双引号拼接
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting  $greeting_1
# 使用单引号拼接
greeting_2='hello, '$your_name' !'
greeting_3='hello, ${your_name} !'
echo $greeting_2  $greeting_3

执行结果:

hello, runoob ! hello, runoob !
hello, runoob ! hello, ${your_name} !

获取字符串长度

 string="abcdef"
echo ${#string}
#输出 6

提取子字符串
以下实例从字符串第 2 个字符开始截取 4 个字符:

 string="abcdefg"
 echo ${string:1:4}
 # 输出 bcde

注意:第一个字符的索引值为 0。

查找子字符串
查找字符 d或 l 的位置(哪个字母先出现就计算哪个):

string="god id girl"
echo `expr index "$string" dl`
输出:3

注意: 以上脚本中 ` 是反引号,而不是单引号 ',不要看错了哦

Shell 传递参数

我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……
实例
以下实例我们向脚本传递三个参数,并分别输出,其中 $0 为执行的文件名(包含文件路径):

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

echo "Shell 传递参数实例!";
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "第二个参数为:$2";
echo "第三个参数为:$3";

输出如下;

[root@hadoop1 ~]# sh test10.sh 1 2 3
Shell 传递参数实例!
执行的文件名:test10.sh
第一个参数为:1
第二个参数为:2
第三个参数为:3
另外,还有几个特殊字符用来处理参数:
$# 	传递到脚本的参数个数
$* 	以一个单字符串显示所有向脚本传递的参数。
如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
$$ 	脚本运行的当前进程ID号
$! 	后台运行的最后一个进程的ID号
$@ 	与$*相同,但是使用时加引号,并在引号中返回每个参数。
如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
$- 	显示Shell使用的当前选项,与set命令功能相同。
$? 	显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

函数:

无返回值的情形:

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


function ceshifunction(){

echo "测试第一个函数的执行"

}

echo "我的函数开始执行了"
ceshifunction
echo "我的函数执行结束了"

输出结果如下;

[root@hadoop1 ~]# sh test13.sh 
我的函数开始执行了
测试第一个函数的执行
我的函数执行结束了

有返回值的情形

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

function ceshireturn(){

   echo "测试两个数据相加"
   echo "请输入第一个参数"
   read a
   echo "请输入第二个参数"
   read b
   echo "两个数字分别为 $a  和  $b !"
   return $(($a + $b ))


}
 ceshireturn 
 echo "输入的两个数字之和为 $? !"

输出结果如下;

测试两个数据相加
请输入第一个参数
34
请输入第二个参数
45
两个数字分别为 3445 !
输入的两个数字之和为 79 !

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值