We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
原文地址
病毒肆掠 在家来无事,把shell的知识整理一下
shell
源码地址 github 求点个 star ⭐️
shell是一门脚本语言,Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
我们常见的操作系统如 mac 的 OSX 系统,打开终端就可以执行我们的shell(Bash shell)。windows 系统中我们的cmd终端也可以执行,Linux系统一等公民的shell环境
shell(Bash shell)
cmd
Linux
无论什么开发者,或多或少都会运用到一些shell的知识,这篇文章旨在帮助你完整的整理shell的基本知识
话不多说让我们开始吧 !
作为一门脚本语言,和其他语言一样shell中也存在:
my_var='new.ruoduan.cn'
for file in `ls /etc` # 以上语句将 /etc 下目录的文件名循环出来
redVar="abc" readonly redVar redVar="213"
This variable is read only.
del_var='待会要删除' unset del_var echo $del_var
输出为空
name='ruoduan' echo "my name is ${name} !" echo 'my name is $name !'
引号里可以有变量,双引号里可以出现转义字符
获取字符串长度 echo ${#name}
echo ${#name}
截取字符串 和 python 类似 echo ${name:3:1}
echo ${name:3:1}
查找字符串 echoexpr index "$name" r# 输出1
echo
# 输出1
arguments.sh
echo "Shell 传递参数实例!"; echo "执行的文件名:$0"; echo "第一个参数为:$1"; echo "第二个参数为:$2"; echo "第三个参数为:$3";
终端执行 bash arguments.sh 1 2 3
bash arguments.sh 1 2 3
输出:
Shell 传递参数实例! 执行的文件名:arguments.sh 第一个参数为:1 第二个参数为:2 第三个参数为:3
转义符:
$*
"$1" "$2" … "$n"
echo -e "\n Shell 传递参数实例!"; echo "第一个参数为:$1"; echo "参数个数为:$#"; echo "传递的参数作为一个字符串显示:$*";
Shell 传递参数实例! 第一个参数为:1 参数个数为:3 传递的参数作为一个字符串显示:1 2 3
比较容易理解,一个文本带过
arr.sh
my_array=(A B "C" D) array_name[0]=value0 array_name[1]=value1 array_name[2]=value2 echo $array_name[1] # 获取数组中的所有元素 # 使用@ 或 * 可以获取数组中的所有元素 echo "数组中的所有元素为${array_name[*]} " # 获取数组的长度å echo "数组中的长度${#array_name[*]} "
value0[1] 数组中的所有元素为value0 value1 value2 数组中的长度3
shell 运算符分为如下几类
原生 bash 不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。
val=`expr 3 + 3` echo "两数之和为 : $val"
两数之和为 : 6
算术运算
a=30 b=60 val=`expr $a + $b` echo "a + b : $val" val=`expr $a - $b` echo "a - b : $val" val=`expr $a \* $b` echo "a * b : $val" val=`expr $b / $a` echo "b / a : $val" val=`expr $b % $a` echo "b % a : $val" if [ $a == $b ] then echo "a 等于 b" fi if [ $a != $b ] then echo "a 不等于 b" fi
两数之和为 : 6 a + b : 90 a - b : -30 a * b : 1800 b / a : 2 b % a : 0 a 不等于 b
其他的运算符 就不给出实例了详情 源码
echo '啦啦啦~ 哈哈哈' # 显示转义字符 echo -e '啦啦啦~ \n 哈哈哈' # 显示变量 # 有点类似于 python 中的 input read name echo "$name It is a test" # 显示结果定向至文件 echo -e "显示结果定向至文件的内容\n" > myfile.log # 显示命令执行结果 echo `date`
比较简单
语法: printf format-string [arguments...]
echo "Hello, Shell" printf "Hello, Shell\n" # 格式化打印 printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg printf "%-10s %-8s %-4.2f\n" 小米 男 66.1234 printf "%-10s %-8s %-4.2f\n" 小红 男 48.6543 printf "%-10s %-8s %-4.2f\n" 小康 女 47.9876
Hello, Shell Hello, Shell 姓名 性别 体重kg 小米 男 66.12 小红 男 48.65 小康 女 47.99
%s %c %d %f都是格式替代符
%s %c %d %f
%-10s 指一个宽度为 10 个字符(-表示左对齐,没有则表示右对齐),任何字符都会被显示在 10 个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。
%-10s
%-4.2f 指格式化为小数,其中.2 指保留 2 位小数。
%-4.2f
if [ $a == $b ] then echo "a 等于 b" elif [ $a -gt $b ] then echo "a 大于 b" elif [ $a -lt $b ] then echo "a 小于 b" else echo "没有符合的条件" fi
shell 中流程控制以if开始fi结尾
if
fi
num1=$[2*3] num2=$[1+5] if test $[num1] -eq $[num2] then echo '两个数字相等!' else echo '两个数字不相等!' fi # for 循环 for loop in 1 2 3 4 5 do echo "The value is: $loop" done
The value is 1 The value is 2 The value is 3 The value is 4 The value is 5
int=1 while(( $int<=6 )) do echo $int let "int++" done
1 2 3 4 5 6
while true do command done
or
for (( ; ; ))
until [ ! $a -lt 10 ] do echo $a a=`expr $a + 1` done
echo '输入 1 到 4 之间的数字:' echo '你输入的数字为:' read aNum case $aNum in 1) echo '你选择了 1' ;; 2) echo '你选择了 2' ;; 3) echo '你选择了 3' ;; 4) echo '你选择了 4' ;; *) echo '你没有输入 1 到 4 之间的数字' ;; esac
site="a" case "$site" in "a") echo "is a" ;; "b") echo "is b" ;; "c") echo "is c" ;; esac
demoFun () { echo "函数执行" } demoFun
returnFun () { echo '返回2数相加' echo '输入第一个数字' read aNum echo '输入第二个数字' read bNum echo "$aNum 加 $bNum" return $(($aNum+$bNum)) } returnFun echo "输入的两个数字之和为 $? !"
函数返回值在调用该函数后通过 $? 来获得 注意:所有函数在使用前必须定义。这意味着必须将函数放在脚本开始部分,直至 shell 解释器首次发现它时,才可以
函数参数
和前面的传递参数大致相同
funWithParam(){ echo "第一个参数为 $1 !" echo "第二个参数为 $2 !" echo "err:第十个参数为 $10 !" echo "第十个参数为 ${10} !" echo "第十一个参数为 ${11} !" echo "参数总数有 $# 个!" echo "作为一个字符串输出所有参数 $* !" } funWithParam 1 2 3 4 5 6 7 8 9 66 99
输出:
第一个参数为 1 ! 第二个参数为 2 ! err:第十个参数为 10 ! 第十个参数为 66 ! 第十一个参数为 99 ! 参数总数有 11 个! 作为一个字符串输出所有参数 1 2 3 4 5 6 7 8 9 66 99 !
当 n>=10 时,需要使用${n}来获取参数
和 JavaScript ECma5 差不多
test1.sh
file_name='test1文件数据'
test2.sh
. ./test1.sh # or # source ./test1.sh echo $file_name
输出: test1文件数据
test1文件数据
到这里 shell 的基本知识也差不多了本指南源码
码字不易 求点个 star ⭐️
vim 图
The text was updated successfully, but these errors were encountered:
No branches or pull requests
缘起
源码地址 github 求点个 star ⭐️
shell 环境
无论什么开发者,或多或少都会运用到一些
shell
的知识,这篇文章旨在帮助你完整的整理shell
的基本知识话不多说让我们开始吧 !
start
作为一门脚本语言,和其他语言一样
shell
中也存在:变量
my_var='new.ruoduan.cn'
This variable is read only.
输出为空
获取字符串长度
echo ${#name}
截取字符串 和 python 类似
echo ${name:3:1}
查找字符串
echo
expr index "$name" r# 输出1
传递参数
arguments.sh
终端执行
bash arguments.sh 1 2 3
输出:
转义符:
$*
相同,但是使用时加引号,并在引号中返回每个参数。如"$@"用「"」括起来的情况、以"$1" "$2" … "$n"
的形式输出所有参数。输出:
数组
比较容易理解,一个文本带过
arr.sh
输出:
运算符
两数之和为 : 6
算术运算
输出:
其他的运算符 就不给出实例了详情 源码
shell echo
比较简单
shell printf
语法:
printf format-string [arguments...]
输出:
%s %c %d %f
都是格式替代符%-10s
指一个宽度为 10 个字符(-表示左对齐,没有则表示右对齐),任何字符都会被显示在 10 个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。%-4.2f
指格式化为小数,其中.2 指保留 2 位小数。流程控制
shell 中流程控制以
if
开始fi
结尾if else 语句经常与 test 命令结合
输出:
输出:
or
for (( ; ; ))
continue 命令与 break 命令类似,只有一点差别,它不会跳出所有循环,仅仅跳出当前循
函数
函数返回值在调用该函数后通过 $? 来获得
注意:所有函数在使用前必须定义。这意味着必须将函数放在脚本开始部分,直至 shell 解释器首次发现它时,才可以
函数参数
和前面的传递参数大致相同
输出:
当 n>=10 时,需要使用${n}来获取参数
shell 文件模块
和 JavaScript ECma5 差不多
test1.sh
file_name='test1文件数据'
test2.sh
输出:
test1文件数据
到这里 shell 的基本知识也差不多了本指南源码
码字不易 求点个 star ⭐️
vim 图
The text was updated successfully, but these errors were encountered: