shell脚本中 if 、for 命令使用方法

7 篇文章 0 订阅

1. if 语句的使用

if语句的语法:if [ ! -f "${file}" ]; then如果有else,为:

if [ ... ]; then
	...
elif ...; then
	...
else
	...
fi 

eg: 判断某一个文件是否存在

file="test/1/hello.txt"
if [ ! -f test/1/hello.txt ]; then
# if [ ! -f "${file}" ]; then
	echo "file is not exist"
else
	echo "file is exist"
fi

注意:

  • 表达式和运算符之间要有空格

  • if和[之间也要有空格,for循环一定有空格

  • 在比较时,=前后各有一个空格。如果忘记加空格,那就不是比较关系了,而是变成了赋值语句

    • 是变量定义的时候变量和=之前不能有空格。eg:val='expr 2 + 3'

字符串比较

进行字符串比较时,最好用双中括号,因为有时候采用单个中括号会产生错误。

  • 双中括号是Bash的一个扩展特性。如果出于性能考虑,使用ash或dash来运行脚本,那么将无法使用该特性。

示例:
测试两个字符串是否相同:

  • [[ $str1 = $str2 ]]:当str1等于str2时,返回真。也就是说,str1和str2包含的文本是一模一样的。
  • [[ $str1 == $str2 ]]:这是检查字符串是否相同的另一种写法

2. for语句使用

for循环的正确写法:

for VARIABLE in 1 2 3 4 5 .. N
do
	command1
	command2
	commandN
done

如何使用for遍历一个string字符串:
可以采用如下方法:

pull_project="dependency dependency_arm dependency_ubuntu”

for val in $pull_project; do
  echo "$val..."
done

注意: for、do关键字是分开的,如果要把多行写在一起,使用;分离开。eg:for i in {0..3}; do echo "i = $i" ;done

for index in {0..3}
do 
	echo "index=$index"
done 
  • 复杂一点的for
for i in {0..10..2} #bash 4.*以上版本才支持

for i in $(seq 1 2 20) #已经过时的用法,mac下还支持 
#语法 (seq start [interval] end),其中的interval是可选的,默认为1
# eg:seq(10 5 20)输出10,15,20,以5为距离,从10开始增加
# seq也支持下面这种写法

END=${#a[@]}
for i in $(seq 1 $END); do echo $i; done

for((c=1; c<= 5; c+=2)) #三个表达式实现一个for循环,是自己熟悉的版本
for (( ; ; )) #无限循环,相当于while(1)
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是 Shell 脚本常用的命令以及使用方法: 1. echo:输出文本或变量值 用法:echo [选项] [字符串] 常用选项: -n:不换行输出 -e:启用转义字符 示例: ``` echo "Hello, world!" # 输出 Hello, world! echo -n "Hello, " # 输出 Hello, 不换行 echo "world!" # 输出 world!,与上一行连在一起 echo -e "1\t2\t3\n4\t5\t6" # 输出带有制表符和换行符的字符串 ``` 2. read:接收用户输入 用法:read [选项] [变量名] 常用选项: -p:提示用户输入时显示的字符串 示例: ``` read -p "请输入你的名字:" name echo "你好,$name!" ``` 3. if:条件语句 用法: ``` if [ 条件 ]; then # 条件成立时执行的语句 else # 条件不成立时执行的语句 fi ``` 示例: ``` if [ $1 -gt 0 ]; then echo "$1 是正整数" elif [ $1 -eq 0 ]; then echo "$1 是零" else echo "$1 是负整数" fi ``` 4. for:循环语句 用法: ``` for 变量 in 列表; do # 循环体 done ``` 示例: ``` for i in {1..10}; do echo $i done for file in *.txt; do echo $file done ``` 5. while:循环语句 用法: ``` while [ 条件 ]; do # 循环体 done ``` 示例: ``` i=1 while [ $i -le 10 ]; do echo $i i=$((i+1)) done ``` 6. case:多分支语句 用法: ``` case 变量 in 模式1) # 模式1 成立时执行的语句 ;; 模式2) # 模式2 成立时执行的语句 ;; *) # 所有模式都不成立时执行的语句 ;; esac ``` 示例: ``` case $1 in start) echo "启动服务" ;; stop) echo "停止服务" ;; restart) echo "重启服务" ;; *) echo "用法:$0 start|stop|restart" ;; esac ``` 7. test:测试文件或字符串是否存在,以及比较数值 用法: ``` test [选项] 参数 [选项] 参数 ``` 常用选项: -e:测试文件是否存在 -f:测试文件是否为普通文件 -d:测试文件是否为目录 -z:测试字符串是否为空 -n:测试字符串是否非空 -eq:测试数值是否相等 -lt:测试数值是否小于 -gt:测试数值是否大于 示例: ``` if test -e file.txt; then echo "file.txt 存在" fi if [ -f file.txt ]; then echo "file.txt 是普通文件" fi if [ -d dir ]; then echo "dir 是目录" fi if [ -z "$str" ]; then echo "str 是空字符串" fi if [ $num -gt 0 ]; then echo "num 是正数" fi ``` 8. grep:文本搜索工具 用法:grep [选项] 模式 [文件] 常用选项: -i:忽略大小写 -v:反向搜索,输出不匹配的行 -n:显示匹配行的行号 示例: ``` grep "hello" file.txt # 在 file.txt 搜索 hello grep -i "hello" file.txt # 在 file.txt 忽略大小写地搜索 hello grep -n "hello" file.txt # 在 file.txt 搜索 hello 并显示匹配行的行号 grep -v "hello" file.txt # 在 file.txt 反向搜索,输出不匹配的行 ``` 9. sed:流编辑器,用于文本替换 用法:sed [选项] '命令' 文件 常用命令: s/模式/替换/:替换指定模式为指定替换内容 示例: ``` sed 's/hello/hi/g' file.txt # 将 file.txt 所有 hello 替换为 hi ``` 10. awk:文本处理工具,可进行简单数据分析和处理 用法:awk [选项] '模式 { 命令 }' [文件] 常用命令: print:输出指定内容 示例: ``` awk '{ print $1 }' file.txt # 输出 file.txt 每行的第一个单词 ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值