.sh文件
在 linux 中,文件只要有可执行权限就可以执行,但能不能执行看文件类型 mime 。类比 bat 的话, linux 是 bash 脚本。
.sh文件
建立把命令写好以后保持,扩展名改为.sh,再赋予运行权限,或者双击以后选择运行就可以了
建立把命令写好以后保持,扩展名改为.sh,再赋予运行权限,或者双击以后选择运行就可以了
我在文档中写了这些:
sudo grub-reboot 2
shutdown -r now
然后保存为.sh文件,双击后选择运行没反应,选择在终端执行说文件类型出错。
我是哪里做的不对吗?
你这个问题,ai能轻松解答给你
就是脚本文件
我在文档中写了这些:
sudo grub-reboot 2
shutdown -r now
然后保存为.sh文件,双击后选择运行没反应,选择在终端执行说文件类型出错。
我是哪里做的不对吗?
1. 缺少 Shebang 行
Shell 脚本的第一行需要指定解释器(Shebang 行),否则系统不知道如何执行该脚本。
- 解决方法:在脚本开头添加
#!/bin/bash(假设你用的是 Bash)。
修改后的脚本内容:
bash复制
#!/bin/bash
sudo grub-reboot 2
shutdown -r now
鄙人使用 Kubuntu,属于又菜又爱玩的类型,所以,只要它一有长期支持版发布,我就喜欢把硬盘包括分区做个彻底全格,直接刷上最新版本,并且还可以尝试不同的文件系统
由于怕麻烦,就写了个大约 850 行的 Shell 脚本文件(目前还在完善中……),初步安装完系统后一键启动该脚本,鄙人就抬着手机去宠幸 3D 区的蒂法和四妹了,剩下的全由电脑自动搞定,省心省力两不误

1. 缺少 Shebang 行
Shell 脚本的第一行需要指定解释器(Shebang 行),否则系统不知道如何执行该脚本。
- 解决方法:在脚本开头添加
#!/bin/bash(假设你用的是 Bash)。
修改后的脚本内容:
bash复制
#!/bin/bash
sudo grub-reboot 2
shutdown -r now
按你说的修改了,可以执行了,但运行后直接重启了,好像没有执行第一行,按说应该进Win10的,但还是进了Deepin。
1. 缺少 Shebang 行
Shell 脚本的第一行需要指定解释器(Shebang 行),否则系统不知道如何执行该脚本。
- 解决方法:在脚本开头添加
#!/bin/bash(假设你用的是 Bash)。
修改后的脚本内容:
bash复制
#!/bin/bash
sudo grub-reboot 2
shutdown -r now
终于解决不能直接运行的情况了,谢谢!可以多例举些命令式吗?
终于解决不能直接运行的情况了,谢谢!可以多例举些命令式吗?
如果你会任何一个编程语言的话就很简单
#!/bin/bash
echo "Hello World"
* `#!/bin/bash` 表示使用 Bash 解释器。
2. 赋予执行权限:
**bash**复制
chmod +x hello.sh
3. 运行脚本:
**bash**复制
./hello.sh # 输出:Hello World
### **3. 变量**
#### 定义与使用变量
**bash**复制
name="Alice"
echo "Hello $name" # 输出:Hello Alice
* 变量名不加 `$`,使用时用 `$变量名`。
* 等号两边**不能有空格**!
### **4. 输入输出**
#### 读取用户输入
**bash**复制
echo "Enter your name:"
read name
echo "Hello $name"
#### 输出格式化
**bash**复制
printf "当前用户:%s\n目录:%s\n" (whoami) (pwd)
### **5. 条件判断(if 语句)**
#### 基本语法
**bash**复制
if [ 条件 ]; then
命令
elif [ 其他条件 ]; then
命令
else
命令
fi
#### 示例:判断数字大小
**bash**复制
num=10
if [ $num -gt 5 ]; then
echo "$num 大于 5"
else
echo "$num 小于等于 5"
fi
#### 常用比较符号:
* 数值比较:`-eq`(等于)、`-ne`(不等于)、`-gt`(大于)、`-lt`(小于)
* 字符串比较:`=`(相等)、`!=`(不等)
* 文件判断:`-f 文件存在`、`-d 目录存在`
### **6. 循环**
#### **for 循环**
遍历列表或范围:
**bash**复制
for i in 1 2 3; do
echo "数字: $i"
done
输出:
数字: 1
数字: 2
数字: 3
#### **while 循环**
**bash**复制
count=0
while [ $count -lt 3 ]; do
echo "计数: $count"
((count++))
done
### **7. 函数**
#### 定义与调用函数
**bash**复制
定义函数
say_hello() {
echo "Hello $1"
}
调用函数并传参
say_hello "Bob" # 输出:Hello Bob
* `$1` 表示第一个参数,`$2` 为第二个,依此类推。
### **8. 脚本参数**
脚本可以通过 `$1, $2, ...` 接收命令行参数:
**bash**复制
示例:脚本 add.sh
#!/bin/bash
sum=$(( $1 + $2 ))
echo "和为:$sum"
运行:./add.sh 3 5 → 输出:和为:8
#### 其他参数变量:
* `$#`:参数个数
* `$@`:所有参数列表
* `$0`:脚本名称
### **9. 实例:自动备份文件**
**bash**复制
#!/bin/bash
备份指定目录到 /backup 文件夹
backup_dir="/backup"
source_dir=$1 # 从命令行参数获取源目录
if [ -d "$source_dir" ]; then
tar -czf "backup_dir/backup_(date +%Y%m%d).tar.gz" "$source_dir"
echo "备份成功!"
else
echo "错误:目录不存在!"
fi
### **10. 调试脚本**
* 显示执行过程:
**bash**复制
bash -x script.sh
* 在脚本中添加 `set -x` 启用调试模式。
### **注意事项**
1. **空格敏感**:条件判断 `[ $a -eq $b ]` 中的空格必须保留。
2. **引号使用**:变量包含空格时需用双引号,如 `"$var"`。
3. **权限问题**:确保脚本有执行权限(`chmod +x`)。
任何脚本文件,只要加上可执行属性即可,常用的双击后即可终端shell运行的,一般是以“.sh”为后缀的文本完档。
按你说的修改了,可以执行了,但运行后直接重启了,好像没有执行第一行,按说应该进Win10的,但还是进了Deepin。
因为sudo需要交互验证密码提权才能执行后面的命令,相当于你这行没有执行成功,你可以改成pkexec弹窗提权。
我在文档中写了这些:
sudo grub-reboot 2
shutdown -r now
然后保存为.sh文件,双击后选择运行没反应,选择在终端执行说文件类型出错。
我是哪里做的不对吗?
我之前说的太笼统了,这次详细一些希望有用。
sh脚本文件需要告诉终端他是个脚本,也就是首行约定俗成#!指定解释器,Deepin下通常是#!/bin/bash
之后用sudo运行两个需要root用户权限的命令,因为安全原因这样直接写是不行的
因为就两行,可以考虑通过sudo -s命令提权,逐条执行命令,也就是
#!/bin/bash
sudo -s grub-reboot 2
sudo -s reboot
保持之后扩展名改为sh,右键点属性,权限里勾上运行权限,然后双击脚本选择在终端中运行,输入密码回车应该就行了。
如果想再省省力也可以用管道给sudo传输入信息,这样双击点终端运行就直接生效,但是密码就在脚本里明文了,如果只是自己用,也可以考虑:
#!/bin/bash
echo 这里改成你的密码 | sudo -S grub-reboot 2
echo 这里改成你的密码 | sudo -S reboot
如果你会任何一个编程语言的话就很简单
#!/bin/bash
echo "Hello World"
* `#!/bin/bash` 表示使用 Bash 解释器。
2. 赋予执行权限:
**bash**复制
chmod +x hello.sh
3. 运行脚本:
**bash**复制
./hello.sh # 输出:Hello World
### **3. 变量**
#### 定义与使用变量
**bash**复制
name="Alice"
echo "Hello $name" # 输出:Hello Alice
* 变量名不加 `$`,使用时用 `$变量名`。
* 等号两边**不能有空格**!
### **4. 输入输出**
#### 读取用户输入
**bash**复制
echo "Enter your name:"
read name
echo "Hello $name"
#### 输出格式化
**bash**复制
printf "当前用户:%s\n目录:%s\n" (whoami) (pwd)
### **5. 条件判断(if 语句)**
#### 基本语法
**bash**复制
if [ 条件 ]; then
命令
elif [ 其他条件 ]; then
命令
else
命令
fi
#### 示例:判断数字大小
**bash**复制
num=10
if [ $num -gt 5 ]; then
echo "$num 大于 5"
else
echo "$num 小于等于 5"
fi
#### 常用比较符号:
* 数值比较:`-eq`(等于)、`-ne`(不等于)、`-gt`(大于)、`-lt`(小于)
* 字符串比较:`=`(相等)、`!=`(不等)
* 文件判断:`-f 文件存在`、`-d 目录存在`
### **6. 循环**
#### **for 循环**
遍历列表或范围:
**bash**复制
for i in 1 2 3; do
echo "数字: $i"
done
输出:
数字: 1
数字: 2
数字: 3
#### **while 循环**
**bash**复制
count=0
while [ $count -lt 3 ]; do
echo "计数: $count"
((count++))
done
### **7. 函数**
#### 定义与调用函数
**bash**复制
定义函数
say_hello() {
echo "Hello $1"
}
调用函数并传参
say_hello "Bob" # 输出:Hello Bob
* `$1` 表示第一个参数,`$2` 为第二个,依此类推。
### **8. 脚本参数**
脚本可以通过 `$1, $2, ...` 接收命令行参数:
**bash**复制
示例:脚本 add.sh
#!/bin/bash
sum=$(( $1 + $2 ))
echo "和为:$sum"
运行:./add.sh 3 5 → 输出:和为:8
#### 其他参数变量:
* `$#`:参数个数
* `$@`:所有参数列表
* `$0`:脚本名称
### **9. 实例:自动备份文件**
**bash**复制
#!/bin/bash
备份指定目录到 /backup 文件夹
backup_dir="/backup"
source_dir=$1 # 从命令行参数获取源目录
if [ -d "$source_dir" ]; then
tar -czf "backup_dir/backup_(date +%Y%m%d).tar.gz" "$source_dir"
echo "备份成功!"
else
echo "错误:目录不存在!"
fi
### **10. 调试脚本**
* 显示执行过程:
**bash**复制
bash -x script.sh
* 在脚本中添加 `set -x` 启用调试模式。
### **注意事项**
1. **空格敏感**:条件判断 `[ $a -eq $b ]` 中的空格必须保留。
2. **引号使用**:变量包含空格时需用双引号,如 `"$var"`。
3. **权限问题**:确保脚本有执行权限(`chmod +x`)。
学习了,厉害
Popular Events
More

中文 
如题,想执行的命令放到文本件中,有什么格式可以双击运行?就你Windows中的Bat文件