Shell基础语法学习

常用的逻辑

输出内容到文件中

通过重定向方式将执行命令的输出到文件,替换文件中的已有内容>
cmd > file_path.txt

如果cmd执行失败,上面的情况是否不会写入文件,而是会在命令行控制台上打印报错信息,那么我们如果希望命令执行失败的结果也写入到目标文件中,那可以按照下面的方式来进行:

cmd> file_path.txt 2>&1

0代表标准输入,1代表标准输出,2代表标准错误。在这里,你要将标准错误(2) 重定向(&)到与标准输出(1)相同的地址。

通过重定向方式将执行命令的输出到文件,追加到文件已有内容后面>>
cmd >> file_path.txt
通过tee命令显示的将执行命令的输出到文件,替换文件中的已有内容

通过tee命令,除了达到重定向的效果,另外还是会继续在命令行的控制台上显示写入到文件中的内容。

cmd | tee file_path.txt
通过tee命令显示的将执行命令的输出到文件,追加到文件已有内容后面
cmd | tee -a file_path.txt

打印内容(输出内容到屏幕)

echo输出内容到控制台

echo "test"

判断文件是否存在的方法

if [ ! -f "$filename_path" ]; then
        touch $filename_path
else
        echo $filename_path
fi

-f filename_path //如果 filename_path为普通文件,值为true
-d filename_path //如果 filename_path为目录,值为true

-e filename_path //如果 filename_path存在,值为true
-L filename_path //如果 filename_path为符号链接,值为true
-r filename_path //如果 filename_path可读,值为true
-w filename_path //如果 filename_path可写,值为true
-x filename_path //如果 filename_path可执行,值为true
-s filename_path //如果文件长度不为0,值为true
-h filename_path //如果文件是软链接,值为true

清空文件内容

> $file_path

获取命令行传递的参数

sh xxx.sh aa bb cc

echo $#   #参数个数:3
$1     #第1个参数   aa
$2     #第2个参数   bb

如何解决一个字符串内部的空格引起的逻辑处理问题?

灵活使用双引号进行解决。例如:
当i=0的时候, a u t h o r l i s t [ i ] 的值是 S t e p h a n e N i c o l l ,当希望它作为一个整体传递参数到其他地方,那么对它使用加上双引号的获取方式 " {author_list[i]}的值是Stephane Nicoll,当希望它作为一个整体传递参数到其他地方,那么对它使用加上双引号的获取方式" authorlist[i]的值是StephaneNicoll,当希望它作为一个整体传递参数到其他地方,那么对它使用加上双引号的获取方式"{author_list[i]}",如果这里直接使用${author_list[i]},Stephane Nicoll就变成了Stephane和Nicoll2个参数了。

author_list=("Stephane Nicoll" "Andy Wilkinson");
 for ((i=0;i<${#author_list[@]};i++));do
          echo ${author_list[i]}
          write_to_file_of_author "${author_list[i]}"
 done

if语句

if判断数值大小

if条件判断中的运算符如下:

-gt    # 对应>
-lt    # 对应<
-eq    # 对应=
-ne    #对应!=
-ge    #对应>=
le     #对应<=

样例:

after_date="2022-09-21"
until_date="2022-09-22"
save_file_path="/f/mytool"
echo $#
if [ $# -gt 1 ]; then
    after_date=$1
    until_date=$2
fi
echo $after_date
echo $until_date

变量

定义变量

var1="test";
echo $var1

判断变量

if [ "$var1" = "$var2" ]; then
    echo '相等'
else
    echo '不相等'
fi

变量中带有空格的时候,如何传递?

当i=0的时候, a u t h o r l i s t [ i ] 的值是 S t e p h a n e N i c o l l ,当希望它作为一个整体传递参数到其他地方,那么对它使用加上双引号的获取方式 " {author_list[i]}的值是Stephane Nicoll,当希望它作为一个整体传递参数到其他地方,那么对它使用加上双引号的获取方式" authorlist[i]的值是StephaneNicoll,当希望它作为一个整体传递参数到其他地方,那么对它使用加上双引号的获取方式"{author_list[i]}"

author_list=("Stephane Nicoll" "Andy Wilkinson");
 for ((i=0;i<${#author_list[@]};i++));do
          echo ${author_list[i]}
          write_to_file_of_author "${author_list[i]}"
 done

数组

定义数组

shell数组使用圆括号()包括起来具体的数组元素,另外数组元素之间使用空格分隔开,另外对于字符串类型,每个元素使用双引号"或者单引号’进行修饰。
语法:数组名=(元素1 元素2 元素3)
例如:

my_array=(1 2 3);   #数字数组
my_array=("ab" "bc" "cd");   #字符串数组

访问数组中的某个元素

语法:${数组名[元素下标]}

my_array_item=${my_array[1]};
echo $my_array_item;

获取数组元素个数

语法:${#数组名[@/*]}

my_array_length=${#my_array[@]};
echo $my_array_length;
my_array_length=${#my_array[*]};
echo $my_array_length;

遍历数组

方式1:for语句方式for…each方式

for item in ${my_array[@]};do
    echo $item;
done

方式2:for语句 数组下标循环访问方式

for ((i=0;i<${#my_array[@]};i++)); do
    echo ${my_array[i]};
done

函数

定义函数

shell的函数是使用之前需要定义好。先定义后使用。
因此必须将函数的定义放在脚本的开头部分。
其他说明:
关于函数定义开头部分会有下面样例三种方式。
关于返回值,如果显示加了return语句,那么以return为准,如果没有加return语句,那么默认返回的是函数体中最后一个命令执行的运行的结果。范围是0-255的整数。

语法:

[ function ] funname [()]
{
    action;
    [return int;]
}

例如:可以是下面3种风格的定义方式。

function funname()
{
	echo "do something";
	return 0;
}

funname()
{
	echo "do something";
	return 0;
}

function funname
{
	echo "do something";
}

调用函数

调用函数 不带入参

shell脚本中调用函数的方法较为直接,直接使用函数名称即可。

function funname
{
	echo "do something";
}

funcname;
调用函数 带入参

如果需要调用函数的时候带入参,那么相应的在函数体中一般来说也会有对应的入参使用代码。

function funcname 
{
	echo "do something";
	echo $#
	echo $1
	echo $9
	echo ${10}
	echo ${11}
}
funcname 1 2 3 4 5 6 7 8 9 10 11

在函数中使用外部调用传入的参数的方法为:
当n < 10, $n 或者 ${n}
当n>=10, n 或者简单点,可以使用通用的方式 {n} 或者简单点,可以使用通用的方式 n或者简单点,可以使用通用的方式{n}的方式。
我们发现,有的时候如果使用$10,脚本编辑器自动会有不同的颜色显示,但是实际上也能执行成功$10。
参数处理 说明
$# 传递到脚本或函数的参数个数
$
以一个单字符串显示所有向脚本传递的参数
$$ 脚本运行的当前进程ID号
$! 后台运行的最后一个进程的ID号
@ 与 @ 与 @*相同,但是使用时加引号,并在引号中返回每个参数。
$- 显示Shell使用的当前选项,与set命令功能相同。
$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值